这是指什么以及为什么?

时间:2013-03-20 03:38:30

标签: javascript

在这个例子中:

var A = {test: 1, foo: function() { return this.test }}

为什么A.foo()会返回1(至少在node.js中)?我以为this会绑定到外部来电者this,不是吗?

2 个答案:

答案 0 :(得分:5)

当您致电A.foo()时,this中的foo()设置为对象A,因为这就是您所谓的功能。因此,this.test的值为1

您可以使用.call() or .apply()更改this引用的内容。

A.foo.call(newThisValue);

至于为什么......这给你很大的灵活性。您可能有一个作用于this的函数来执行某些操作,并且构建JavaScript的方式允许您以特定方式将该函数应用于任何object。这有点难以描述,但它在inheritance等情况下确实派上用场。另见:http://trephine.org/t/index.php?title=JavaScript_call_and_apply

答案 1 :(得分:1)

在使用obj.method()表示法的Javascript whenever you call a function中,this将绑定到obj

您可以通过将呼叫分成两个单独的步骤来解决此问题:

var f = A.foo;
f(); // "this" will not be A in this case.

或者,滥用逗号运算符:

(17, x.f)()