gpt4 book ai didi

javascript - 我怎样才能将这个有效的原生 ES5 代码转换为使用下划线的 _.bind() 来代替?

转载 作者:行者123 更新时间:2023-11-29 20:03:34 24 4
gpt4 key购买 nike

我有一个现有项目(遗憾地)使用 underscore.js 而不是 ES5 shim 来支持 IE8 和其他非 ES5 浏览器。习惯了ES5,不过一般不会用下划线。我读过 underscore documentation on _.bind并试图让它工作。

这是一个使用原生 ES5 的工作示例:

// Greets people
HelloThing = function (greeting) {
this.greeting = greeting;

this.waitAndSayHello = function() {
setTimeout(function() {
console.log(this.greeting)
}.bind(this), 500);
}
}


var pretend_thing = new HelloThing('hello world');
pretend_thing.waitAndSayHello();

根据我对文档的理解,这是使用下划线的失败尝试:

// Greets people
HelloThing = function (greeting) {
this.greeting = greeting;

this.waitAndSayHello = function() {
var greet = function() {
alert(this.greeting)
}
_.bind(greet, this)
setTimeout(greet, 500);
}
}


var pretend_thing = new HelloThing('hello world');
pretend_thing.waitAndSayHello();​

如何让下划线起作用?

最佳答案

_.bind()方法返回一个绑定(bind)函数。您不对该返回的函数执行任何操作。将它分配给某物并使用该引用而不是原始的 greet 引用:

var greet = function() { 
alert(this.greeting)
};
greet = _.bind(greet, this);
setTimeout(greet, 500);

如果扩展 ES5 示例,您会发现这实际上是原生 bind 方法所发生的事情 - 您可以直接调用函数对象,因为它是 的属性函数.原型(prototype):

var greet = function() {
alert(this.greeting);
};
greet = greet.bind(this);
setTimeout(greet, 500);

关于javascript - 我怎样才能将这个有效的原生 ES5 代码转换为使用下划线的 _.bind() 来代替?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13136478/

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