显式'this'绑定优先级vs隐式'this'绑定优先级

时间:2016-10-24 21:54:32

标签: javascript

我正在阅读Kylie Simpson撰写的“此&对象原型”。作者说,显式绑定的优先级高于隐式绑定。

我理解“obj1.foo()”是隐式绑定,而“obj1.foo(obj2)是显式绑定。

但是,如果隐含更高,我不明白最后两行是如何导致的?

function foo()  console.log( this.a );
var obj1 = { a: 2, foo: foo };
var obj2 = { a: 3, foo: foo };

obj1.foo(); // 2
obj2.foo(); // 3
obj1.foo.call( obj2 ); // 3
obj2.foo.call( obj1 ); // 2

好的,读到这样一个表达式:obj1.foo.call(obj2),我认为,根据那本书,有两种方法来解决“这个”。
第一:显式绑定。 obj2被迫成为foo的背景 第二:隐式绑定,obj1是“obj1 dot xxxxxx”中点后面的函数的上下文,该函数的“this”是obj1。

我的意思是,我认为没有合理的方法可以确定我们选择“先显式”还是“先隐式”。这是一个“惯例” 我希望它更清楚。

1 个答案:

答案 0 :(得分:1)

this关键字在最后两个语句中通过相应对象的call的本地foo方法被覆盖。为call指定的第一个参数是this将在foo范围内的引用。不存在call的其他参数只是作为参数传递给foo。因此,对于call,绑定引用不是真正的优先级,而是完全替换仅用于该函数调用。最后两个陈述分别与:

相同
obj2.foo();
obj1.foo();