我有一个现有项目,(不幸地)使用underscore.js而不是ES5填充程序来支持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()方法返回一个绑定函数。您对返回的函数不做任何事情。将其分配给某些内容,并使用该引用代替原始的greet引用:

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


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

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

关于javascript - 如何转换此工作 native ES5代码以改用下划线的_.bind()?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13136478/

10-12 12:24