2016-09-26 18 views
2

我不知道爲什麼我的代碼沒有運行,有人可以給我一些方向嗎? 當我運行此代碼,檢查控制檯我得到的錯誤如何在匿名函數上使用bind函數

「遺漏的類型錯誤:(中間值)(中間值)(中間值)是不是一個函數」

var person = { 
    firstName: "Jane", 
    lastName: "Doe", 
    getFullName: function() { 
    var fullName = this.firstName + this.lastName; 
    return fullName; 
    } 
} 

(function() { 
    console.log(this.getFullName()); 


}).bind(person); 
+3

記住'.bind(人)'不會調用函數,但返回一個新的功能。添加'(function(){...})。bind(person)()'並在Chrome開發人員工具控制檯中運行您的代碼按預期打印名稱... – forrert

+0

@forrert我得到同樣的錯誤。 –

回答

6

的問題是,你錯過了一個分號(;)。如果在person聲明末尾沒有分號,則代碼可以有效地轉化爲此。

var person = { firstName: 'Jane', ... }(function() { 
    console.log(this.getFullName()); 
}).bind(person); 

語法上,你試圖調用一個對象作爲一個函數,然後使用該函數的結果作爲另一個函數。

這是你的更正後的代碼:

var person = { 
 
    firstName: "Jane", 
 
    lastName: "Doe", 
 
    getFullName: function() { 
 
    var fullName = this.firstName + this.lastName; 
 
    return fullName; 
 
    } 
 
}; 
 

 
// Isn't called because `bind` returns a new function 
 
(function() { 
 
    console.log(this.getFullName()); 
 
}).bind(person); 
 

 
// What you probably want to do 
 
(function() { 
 
    console.log(this.getFullName()); 
 
}).call(person);

+0

謝謝,它現在可行! –

3

你可以扔在一個分號,並用括號一個電話,因爲var聲明並沒有結束,對象person試圖打電話。

var person = { 
 
     firstName: "Jane", 
 
     lastName: "Doe", 
 
     getFullName: function() { 
 
      var fullName = this.firstName + this.lastName; 
 
      return fullName; 
 
     } 
 
    }; // insert semicolon here 
 

 

 
(function() { 
 
    console.log(this.getFullName()); 
 
}).bind(person)(); // add parenthesis