在此示例中:
var A = {test: 1, foo: function() { return this.test }}为什么A.foo()返回1 (至少在node.js中)?我以为this会绑定到外部调用者this,不是吗?
发布于 2013-03-20 11:40:37
当您调用A.foo()时,foo()中的this被设置为对象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
发布于 2013-03-20 11:40:57
在使用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)()https://stackoverflow.com/questions/15514846
复制相似问题