0

我有一个图表对象,带有方法drawupdate. 看到这个(非工作)小提琴

draw对对象的属性做了很多事情,最后绘制了一个图表。在这一点上,我可以定义一个update函数,因为所有被处理的数据都在draw那里。但是我不能update从范围外打电话。

如何将update方法定义为完全独立的方法,以便我可以从对象外部调用它,但它是否能够引用draw方法内的数据?

更新:我发布了一些半伪代码

4

4 回答 4

3

也许像这样:

function MyChart(x,y){

   this.draw = function(){
      console.log('draw chart using variables x:' + x + ' y:' + y);

      return {
          update: function(){
               console.log('update chart using variables x:' + x + ' y:' + y);
          }
      }
   }
}

用法:

 var chart = new MyChart(123,987);
 var drawResult = chart.draw();
 drawResult.update();

现场示例:http: //jsfiddle.net/c9TeU/

于 2013-01-25T09:02:30.303 回答
1
function update(obj) {
}

var obj = {
    function draw() {
        update(this); // works
    }
};

您可能想阅读有关 Javascript函数和函数作用域以及词法作用域的信息。

于 2013-01-25T09:00:25.120 回答
0

由于您没有向我们提供太多信息,因此我将尝试猜测您想要什么。我假设你想要这个:

var updateFunction = function(){
   update();
};

return updateFunction();

但是你可以直接return update;在javascript函数中存储变量,所以如果你可以将一个变量传递到范围之外你也可以传递一个函数

于 2013-01-25T09:00:35.600 回答
0

您可以执行以下操作:

var TestObject = function () {
    var a, b;
    this.draw = function (aVal, bVal) {
        a = aVal;
        b = bVal;
    }
    this.update = function () {
        console.info("a = " + a + " | b = " + b);
    }
}

然后你可以调用:

var obj = new TestObject();
obj.draw(3, 4);
obj.update();

jsfiddle - http://jsfiddle.net/poonia/XAm52/

于 2013-01-25T09:25:49.170 回答