3

这是一个简单的小提琴

我想确保this里面objobj这样我可以ab. 我obj在不同的函数中使用,当我在里面放一个断点时b,我发现那this是窗口,而不是obj.

var obj = {
    a: function() { return 2 },
    b: function() { return 5+ this.a() },
}

$('#hey').text(obj.b());

obj是在许多其他类使用的文件中定义的,因此在 using 站点定义任何一种方法都是没有意义的obj

从@Kamil 的回答来看,看起来我可能需要a作为参数传入b. 如:

var user = obj.b(obj.a);

var obj = {
  a: function() { return 2 },
  b: function(func) { return 5 + func() },
}      

编辑以下工作,但它很乱。有没有更优雅的方式?

我最终改变了

startingSMA = this.simple_moving_average(startingSMA, period, accessor)

到以下:

startingSMA = (function(startingSMA, period, accessor) {
                 return this.simple_moving_average(startingSMA, period, accessor)                  
              }).apply(Statistics, [startingSMA, period, accessor]);
4

3 回答 3

1

我不知道为什么还没有建议 - 使用bind

var obj = {};
obj.b = (function () {
    // "this" will always be "obj"
}).bind(obj);

参考:

于 2013-05-13T04:50:20.220 回答
0

从 Jquery 1.4 开始,您可以使用jQuery.proxy()并选择简单的特定上下文:

$('#hey').text( $.proxy(obj.b, obj) );

在这种情况下,第一个参数是您要调用的函数,第二个参数是上下文。

这是小提琴更新

于 2013-05-13T05:15:04.540 回答
0

每当您调用foo.bar()时,该this值将设置为foo。所以我认为您的代码没有任何问题。

但是,当您间接调用方法时,如

var qux = foo.bar;
qux(); // no dot-notation

全局对象变为this. 也许这就是发生在你身上的事情?

要强制某个this,请使用callor apply

qux.call(foo);
qux.apply(foo);
于 2013-05-13T04:49:46.630 回答