当我试图调用a.t时,为什么这是未定义的?
因为在JavaScript中,这
主要由设置如何调用函数,而不是定义它的地方。a.t()
套这
到一
在通话中,但是l()
套这
要么到未定义
(在严格模式下)或全局对象(在松散模式下)。
更多(在我的博客上):
唯一的例外是“绑定”函数(与函数#bind
)或ES6的“箭头”功能这
从定义它们的上下文中)。
如何在不过分冗长或存储太多的情况下恢复该上下文?
函数#bind
通常是一个好答案:
var l=a.t.bind(a);l();
它返回一个新函数,当调用该函数时,使用这
设置为你给出的第一个参数绑定
.(您还可以绑定其他参数。)这是一个ES5函数,但如果您需要支持非常旧的浏览器,可以轻松地对其进行聚合填充。
如果你只是需要呼叫 我
具有特定的这
值,并且不总是让它使用该值罗伯特·罗斯曼指出你可以使用函数#调用
或函数#应用
:
l.call(this,'a','b','c');//调用`l`时将`this`设置为`a`,参数为'a'、'b'和'c'l.apply(this,['a','b','c']);//调用`l`并将`this`设置为`a`和args'a'、'b'和'c',注意它们是在数组中指定的