簡體   English   中英

為什么 javascript 綁定不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM