gpt4 book ai didi

javascript - 显式 'this' 绑定(bind)优先级与隐式 'this' 绑定(bind)优先级

转载 作者:行者123 更新时间:2023-11-30 00:01:41 24 4
gpt4 key购买 nike

我正在阅读 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com