函数:
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);
绑定出了什么问题?
函数:
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);
绑定出了什么问题?
它是有效的,talk.bind(p)
返回绑定函数:
talk.bind(p)();
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
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();
请查看这个fiddle: http://jsfiddle.net/amspianist/J5BSh/
call
或apply
方法来实现“一次性”绑定。因此,另一个解决上述问题的方法是将.bind
替换为.call
(这里是talk.call(p)
)。 - Platinum Azure