2016-07-09 3 views
0

が、私は「この」ではJSについて学んだJavaScriptで「この」キーワードを使用してウィンドウがあると私は次のコードを持っている理由:コンテキストが

var person1 = { 
    firstName: "John", 
    lastName: "Snow", 

    printName: function(){ 
    console.log(this); 
    } 
} 

var person2 = { 
    firstName: "Aria", 
    lastName: "Stark", 

    printName: function(callbackFunction){ 
    console.log(this); 
    callbackFunction(); 
    } 
} 

person1.printName(); 
person2.printName(person1.printName); 

このコードの出力を示します。

PERSON1

PERSON2

ウィンドウ

私はなぜコンテキスト私を理解しそれに応じてperson1とperson2がコールバックを呼び出すとコンテキストがwindowでperson2ではないのはなぜですか?

+0

this' 'の値は、関数が呼び出された方法によって決定されるため。..' callbackFunction'は、任意の文脈なしで呼び出されるので、グローバル( 'window')は「私はドン何... – Rayon

+0

こんにちはレーヨン、 返されます理由は理解できないのですか?人2がコンテキストだったので「printName」と呼ばれました。なぜなら、「printName」内からcallbackFunctionを呼び出すと、コンテキストはperson2のままになりませんか? – RiskX

+0

私は答えにコメントしました - _ "どうやって呼び出されたのか、どのように渡されるのか..." _参照[___](https://developer.mozilla.org/en/docs/Web/ JavaScript/Reference/Operators/this)___ – Rayon

答えて

0

callbackFunctionは、どのように呼び出されたか(コンテキストが指定されていない場合はウィンドウのコンテキスト)に基づいてコンテキストを取得する式です。

あなたがPERSON1のメソッドがコールされた。ここ

var person1 = { 
 
    firstName: "John", 
 
    lastName: "Snow", 
 

 
    printName: function(){ 
 
    console.log(this); 
 
    } 
 
} 
 

 
var person2 = { 
 
    firstName: "Aria", 
 
    lastName: "Stark", 
 

 
    printName: function(context, callbackFunction){ 
 
    console.log(this); 
 
    callbackFunction.bind(context).call(null); 
 
    } 
 
} 
 

 
person1.printName(); 
 
person2.printName(person1,person1.printName);

私はcallbackFunctionが呼び出されるべきでもcontext、合格していて、それを微調整したい場合。

そして、関数person2.printNameでは、私はコンテキストをコールバック関数にバインドしています。

+0

Guru - _ "どこが通されているかのコンテキストを取る" _音が間違っています..どのように呼び出され、どのように渡されるかは重要ではありません... – Rayon

+0

http://stackoverflow.com/questions/20279484/how - アクセス - 正しい - このコンテキスト内のコールバックは、私にとって完璧な欺瞞のようだ...あなたが同意するなら、フラグを立てる... – Rayon

+1

@Rayonあなたは両方のコメントについて正しい – gurvinder372

関連する問題