[英]Why javascript bind doesn't work
功能:
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
bind
沒有任何問題,它返回一個綁定到作為參數傳遞的對象的函數。 所以你需要像這樣調用它
talk.bind(p)();
正如其他人所提到的, bind 似乎按預期工作,但它需要調用。
另一個更簡潔的解決方案,特別是如果每個“Person”對象都需要對話的能力,將在 person 構造函數中包含該函數:
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/
可以使用call 或 apply代替bind
talk.call(p);
talk.apply(p);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.