gpt4 book ai didi

javascript - 在 Javascript 上,为什么未使用 bind() 绑定(bind)的函数仍然绑定(bind)到对象?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:49:12 25 4
gpt4 key购买 nike

在下面的代码中,第一个函数没有绑定(bind)到obj,但是第二个函数是,所以f()返回fifi g() 按预期返回 Mark Twain。但是第三次​​尝试,是先通过(obj.getCallBack),现在是函数,然后调用,本质上应该和f一样案件。但他们确实打印出了 Mark Twain。为什么它们不使用 bind() 绑定(bind)到 obj 但仍然通过指向 objthis 执行?

(第四次尝试只是对方法的常规调用,this 应该绑定(bind)到调用该方法的对象)。

(在当前的 Chrome、Firefox 和 IE 9 上测试)

window.name = "fifi";

var obj = {
name: "Mark Twain",
getCallBack: function() {
return this.name;
}
}

var f = obj.getCallBack;
var g = f.bind(obj);

console.log(f);
console.log(f());

console.log(g);
console.log(g());

console.log((obj.getCallBack)());
console.log(obj.getCallBack());

最佳答案

您忘记了,如果一个函数作为某个对象的属性被调用,该对象将是调用的 this。所以:

obj.getCallBack() //The function referenced by `obj.getCallBack`
//is called as a property of `obj`, so obj will be `this`
//for the call

f() //The function referenced by f, is not called as a property of some object so
//`this` will depend on strict mode.

在这些基本规则之后,绑定(bind)函数将被调用,它可以被认为是一个代理函数(任何垫片都可以),它使用 .call/.apply 显式设置上下文目标函数。所以代理函数的 this 值并不重要,但在幕后它是由基本规则设置的。

编辑:

(obj.getCallBack) does not return the function as value, because getValue is not called. .所以它与 obj.getCallback 完全相同,适用于第一篇文章。

所以你可以这样做而不会出错:

(obj.getCallback) = 5;

相对于:

(function(){}) = 5; //invalid assignment

关于javascript - 在 Javascript 上,为什么未使用 bind() 绑定(bind)的函数仍然绑定(bind)到对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12707909/

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