为什么javascript绑定不起作用

时间:2014-04-10 15:02:46

标签: javascript bind

功能:

function talk(){ 
        console.log(this.name + " dice: ");
}

var Person = function(name, surname){
    this.name = name;
    this.surname = surname;
}

var p = new Person("Mark", "Red");

talk.bind(p);

绑定有什么问题?

5 个答案:

答案 0 :(得分:16)

它确实有效,talk.bind(p)返回绑定函数:

talk.bind(p)();

答案 1 :(得分:7)

bind()没有任何问题 - 它没有被正确使用。 bind() 返回一个绑定到指定对象的新函数。您仍然需要执行该功能:

function talk(){ 
        console.log(this.name + " dice: ");
}

var Person = function(name, surname){
    this.name = name;
    this.surname = surname;
}

var p = new Person("Mark", "Red");

var markTalks = talk.bind(p);

markTalks();    // logs properly

答案 2 :(得分:2)

bind没有错,它返回一个绑定到作为参数传递的对象的函数。所以你需要像这样调用它

talk.bind(p)();

答案 3 :(得分:1)

正如其他人所提到的,bind似乎按预期工作,但需要调用。

另一种更清洁的解决方案,特别是如果每​​个人都能更清洁。对象需要谈话的能力,将在人员构造函数中包含该函数:

var Person = function(name, surname){
    this.name = name;
    this.surname = surname;
    this.talk = function(){
        console.log(this.name + " dice: ");
    }
}

var p = new Person("Mark", "Red");

p.talk();

看到这个小提琴:http://jsfiddle.net/amspianist/J5BSh/

答案 4 :(得分:1)

call or apply可以代替bind

talk.call(p); talk.apply(p);