作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在阅读 Kylie Simpson 的“this & object prototype”。作者说显式绑定(bind)比隐式绑定(bind)有更高的优先级。
我知道“obj1.foo()”是隐式绑定(bind),而“obj1.foo(obj2)”是显式绑定(bind)。
但是,如果 implicit 更高,我不明白最后两行是如何产生的?
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),我认为,根据那本书,有两种方法可以解决“this”。
第一:显式绑定(bind)。 obj2 被强制成为 foo 的上下文。
第二:隐式绑定(bind),obj1是“obj1 dot xxxxxx”中点后面函数的上下文,那个函数的“this”就是obj1。
我的意思是,我在想没有合乎逻辑的方法来确定我们是选择“显式优先”还是“隐式优先”。这是一个“约定”。
我希望它更清楚。
最佳答案
this
关键字在最后 2 个语句中通过相应对象的 foo
的 native call
方法被覆盖。为 call
指定的第一个参数是 this
将在 foo
范围内的引用。 call
的其他不存在的参数只是作为参数传递给 foo
。因此,对于 call
,绑定(bind)引用并没有真正的优先级,而是被完全替换仅用于该函数调用。最后两个语句分别与:
obj2.foo();
obj1.foo();
关于javascript - 显式 'this' 绑定(bind)优先级与隐式 'this' 绑定(bind)优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40228147/
我是一名优秀的程序员,十分优秀!