javascript - 从javascript数组调用函数

  显示原文与译文双语对照的内容
0 0

我有以下代码:

var foo = {
    x: 2,
    bar: function() {
        alert(this.x);
    }
};

为什么 foo.bar()警报 2时, [foo.bar][0]()警报 undefined?

时间:原作者:8个回答

0 0

所以,从技术上讲, [foo.bar][0]就相当于 foo.bar调用该函数的,但在点 bar已失去" 词法绑定" 与 foo对象,因此调用它时,java script实际上执行以下内容:

foo.bar.call([foo.bar]);

通常,此表达式:

XXX.yyy(args)

被解释为:

XXX.yyy.call(XXX, args);

在这种情况下XXX[foo.bar].yyy[0].

要修复它,需要明确绑定 foo再次执行以下命令:

[foo.bar][0].call(foo);
原作者:
0 0

当你 [foo.bar][0](), thisbar[foo.bar],但不能修改对象的数组 foo.

把电话成像的方法名是 0( 尽管这是错误的语法) 。

([foo.bar]).0(); // you see, `this` became the array object: [foo.bar]

[foo.bar].xundefined.

原作者:
0 0

则原因是你调用的是array对象上的函数。 " 这个" 关键字等于数组。

[foo.bar][0](); 

在java script中的上下文每次调用函数可能会发生变化。 " 这个" 关键字可以有不同的取值根据其调用方式。 如果函数被调用在对象( 包括数组),该语言将使" " 等于对象上调用了它。 另一方面可以保存到另一个变量并调用另一个对象的功能。 像你和这个:

var test=[foo.bar][0];
test();`//here is alert "2" 

和上下文将窗口。

java script中研究和应用方法的调用。 此操作将打开你的眼睛如何灵活的" 这个" 关键字。 这是一个代替人困惑之间很多程序员习惯使用其他语言,但是一旦这一方针的理解有很大的力量来自于它。 jquery的示例使用" 调用" 和" apply ",让事件的回调的上下文中调用的元素上触发了事件。

原作者:
0 0

那是因为当你做出 [foo.bar]你隔离它从主对象数组中( foo ) 和函数你报告 this.x并在一个新创建的对象[ foo .bar] this是不确定的

原作者:
...