use*_*365 12 javascript arrays function this
我有这个代码:
var foo = {
x: 2,
bar: function() {
alert(this.x);
}
};
Run Code Online (Sandbox Code Playgroud)
为什么foo.bar()警报2时会[foo.bar][0]()发出警报undefined?
所以,技术上[foo.bar][0]等同于foo.bar,但是在调用函数时bar已经失去了与foo对象的"词法绑定" ,所以当你调用它时,JavaScript实际执行以下内容:
foo.bar.call([foo.bar]);
Run Code Online (Sandbox Code Playgroud)
通常,这个表达式:
XXX.yyy(args)
Run Code Online (Sandbox Code Playgroud)
被解释为:
XXX.yyy.call(XXX, args);
Run Code Online (Sandbox Code Playgroud)
在这种情况下XXX是[foo.bar]和.yyy是[0].
要修复它,您需要foo再次显式绑定:
[foo.bar][0].call(foo);
Run Code Online (Sandbox Code Playgroud)