2016-09-26 30 views
2

私のコードが実行されていない理由がわかりません。 私はこのコードを実行すると、私はエラー匿名関数でbind関数を使用する方法

取得コンソールチェック「キャッチされない例外TypeError:(中間値)(中間値)(中間値)は関数ではありませんが、」

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