gpt4 book ai didi

javascript - .bind() 不适用于函数

转载 作者:行者123 更新时间:2023-11-29 18:13:54 25 4
gpt4 key购买 nike

我正在尝试使用函数中的变量。我不想对这段代码做任何特别的事情,但我想弄清楚为什么 bind/apply/call 对对象而不是函数起作用。

function another () {
this.var = 'another test'
}

function test (){
this.var = 'test123'
console.log('this.first: ',this.var);
}

var bind = test.bind(another);
console.log('bind: ', bind());

最佳答案

.bind() 适用于函数。它只是不按您的想法行事。

看,函数也是对象。将它们视为对象并不意味着它们会被调用。

function a() { console.log("a was called"); }
function b() { console.log(this); }

var bound = b.bind(a);
bound(); // logs "function a() { }" in my console

在你的例子中,一旦你将 test 绑定(bind)到 another,你就有了一个像 test 一样工作的新函数,但是在哪里this 表示 another,因此 this.var 表示 another.var。所有这一切都发生在 另一个 从未被调用的情况下。

我不完全确定您希望您的代码如何工作,因为它目前没有多大意义。但是,如果您在运行后检查它,您会发现 another.var 现在的值为 'test123'

即使你事先说了another(),也没关系。首先因为 another 没有绑定(bind)到任何东西,所以对它来说,this 意味着全局对象。在浏览器中,another() 基本上只是设置 window.var。但其次,test 设置了自己的值——所以即使两个函数对 this.var 的含义有相同的想法,test 也会覆盖它与 'test123'

关于javascript - .bind() 不适用于函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24985912/

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