2017-03-21 3 views
0

私はオンラインリソースからチェーンAPIを作成しましたが、1つのことを除いて理解しています。私はそれを守るためにこれを捉えることを聞いていますが、私はそれが何を意味するか完全にはわかりません。なぜ私は "これ"を保護しようとしているのですか?変数に格納するのはなぜですか?変数に格納するのは何ですか?これはどのように「これ」を変えますか?私はここやGoogleですばやく検索して答えを見つけられませんでした。おかげjavacriptで "this"をキャプチャします

function Calc(value){ 
    let self= this;//captures this? 
    self.value=value;//sets the initial value; 

    self.add=function(addVal){ 
     self.value+=addVal; 
     return self; 
    } 

    self.sub=function(subVal){ 
     self.value-=subVal; 
     return self; 
    } 
    self.mult=function(multVal){ 
     self.value*= multVal; 
     return self; 
    } 

    self.div=function(subVal){ 
     self.value/= subVal; 
     return self; 
    } 
} 

let cal= new Calc(10); 

cal.add(2).mult(2).sub(2).div(2); 
+0

「このキーワードはどのように機能するのですか」(0120)を参照してください。 – Erazihel

+0

このコードは、あなたが現在 'self'を持っているところのどこでも' this'を使用した場合の結果です。 – nnnnnn

答えて

1

あなたが本当に変数にthisを格納じゃないが、あなただけの変数にthis context variable参照を保存しています。それは大丈夫ですが、重要な違いです。 なぜあなたはそれを行うのですか?さて、thisは、現在のというコンテキストを常に参照する動的参照です。たとえば、新しい関数を呼び出すと、新しいコンテキスト(またはより正確には環境レコード)が作成されます。

あなたの外側のコンテキストfunction Calcからの参照を格納していないならば、それらのそれぞれは、それ自身のthis参照を持っているので、だから、あなたはあなたのサブコンテキストの(add, sub, mult, div)の中でそれにアクセスできませんでした。

+0

「self」ではなく「this」を使用するようにコードを変更した場合、関数が呼び出される方法のために同じ結果が生成されます。 – nnnnnn

+0

真。呼び出しの型は、それが別の方法でバインドされていない限り、 'this'の参照を決定します。私はもっ​​と詳しく説明したくありませんでした。一般的に、ここでOPイモのための「this」の動的性質を理解することが最も重要です。 – jAndy

関連する問題