在这个例子中:
var A = {test: 1, foo: function() { return this.test }}
为什么A.foo()
会返回1
(至少在node.js中)?我以为this
会绑定到外部来电者this
,不是吗?
答案 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)()