page contents

什么是bind()方法?

轩辕小不懂 发布于 2022-03-11 14:42
阅读 496
收藏 0
分类:WEB前端开发
3270
Nen
Nen
- 程序员

bind() 方法返回一个新函数,其 this 已设置为另一个对象。

与 apply() 和 call() 不同,bind() 不会立即执行函数。相反,它返回一个新版本的函数,其 this 被设置为另一个值。

让我们看一个例子:

let person = {

    name: 'John',

    getName: function() {

        console.log(this.name);

    }

};

window.setTimeout(person.getName, 1000);

这不会打印名称“John”,而是打印 undefined。要理解为什么会发生这种情况,请以等效的方式重写最后一行:

let func = person.getName;

setTimeout(func, 1000);

setTimeout() 与 person 对象分开接收函数,但没有 person 的名字。因此,当 setTimeout() 调用 person.getName 时,名称是未定义的。

要解决此问题,你需要将 getName() 方法绑定到 person 对象:

let func = person.getName.bind(person);

setTimeout(func, 1000);

输出:

John

让我们检查一下这种方法是如何工作的:

person.getName 方法绑定到 person 对象。

绑定函数 func 现在将此值设置为 person 对象。当你将这个新绑定函数传递给 setTimeout() 函数时,它知道如何获取此人的姓名。

请先 登录 后评论