javascriptオブジェクトが完全に探索記録されていない01:this!which?
2824 ワード
暖かいヒント:作者の登山記録は、あなたなどの大神にはまったく価値がない.
このすべては、阮大神博文がJavascriptを勉強して閉包したからです.
一見すると、外の変数は
//ここで、
また阮大神の出した第二の問題を見て、もっと愚かになりました.
Javascriptのthis用法-阮一峰はjs中のthisの方向を徹底的に理解しています.追梦子JS中thisキーワード详细解说-リンゴの小さいダイコンJavaScriptの中で知っていて不完全なthis-Snady
サークルを見て、心の中には普遍的な概念があります.getは基本的な概念thisがそのオブジェクトを呼び出すということです.つまり、オブジェクトが定義されている時は
生気が出る
このようにthisという概念を見ると非常に不思議で、多くの対象方面の知識が含まれています.彼の各種の応用方法と原理を徹底的に理解することに対して、非現実的な幻想を生み出しました.その後の文を書く未来のために、私に任せて整理します.
これが見えるのは全部本当の愛です.
このすべては、阮大神博文がJavascriptを勉強して閉包したからです.
// 1:
var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
return function(){
return this.name;
};
}
};
alert(object.getNameFunc()());
この問題は、クローズドに関するブログに出てきました.「次の二つのコードの運行結果を理解してくれれば、クローズドの運行メカニズムを理解してもいいです.」という私の闘志をかき立てました.一見すると、外の変数は
name
と呼ばれています.対象内にはname
という変数があります.これは作用領域チェーンについての理解を考察しています.ここで戻ってきたのは適切な「My Object」ですが、実行結果は私の顔を強く打ってくれました.しかし、大きな「The Window」が出てきました.このコードの中のthis
は一体何を指していますか?さらに、this
をコンソールに印刷した結果、「window」であることが分かりました.問題はthis
にありました.私の思った通りにobject
を指したのではなく、グローバルオブジェクトwindow
を指したのです.これはなぜ「The Window」に戻りましたか?//ここで、
this
を除いても「My Object」に戻ります.具体的な原因はまだよく分かりません.後で補充します.また阮大神の出した第二の問題を見て、もっと愚かになりました.
// 2:
var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
var that = this;
return function(){
return that.name;
};
}
};
alert(object.getNameFunc()());//My Object
これらの行のコードの意味では、getNameFunc
のthis
はobject
を指していますが、その内部の関数では、グローバルオブジェクトを指しています.これはどこに行けばいいですか?Javascriptのthis用法-阮一峰はjs中のthisの方向を徹底的に理解しています.追梦子JS中thisキーワード详细解说-リンゴの小さいダイコンJavaScriptの中で知っていて不完全なthis-Snady
サークルを見て、心の中には普遍的な概念があります.getは基本的な概念thisがそのオブジェクトを呼び出すということです.つまり、オブジェクトが定義されている時は
this
は具体的な方向がありません.呼び出しられた時にのみ、thisは彼を呼び出す対象に割り当てられます.まだ問題があります.このobject.getNameFunc()()
は実行する時に何が起きましたか?私達は第一の問題に対して何かを変えます.var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
console.log(this.name)
return function(){
console.log(this.name)
return this.name;
};
}
};
object.getNameFunc()//My Object 1
object.getNameFunc()()//The Window 2
実行文1では、getNameFunc()
はobject
オブジェクトによって呼び出されたものであり、関数のthis
はobject
を指していますので、この結果が出てきました.実行文2では、実行文1の戻り関数として一度実行されたと理解できます.実行されるのは私たちのwindowオブジェクトです.理解しやすいように執行文2を書き換えます.var getVal = object.getNameFunc()
getVal()//The Window
実際には、実行文2はgetVal()
を実行していますが、この関数の実行対象はwindowであるため、上記のような結果が出てきます.問題2を見てみると、var that = this;
がobject.getNameFunc()
の実行中に実行されていることがよく分かります.そこで、ここのthis
はobject
を指し、変数that
に値を与えた後、実際にobject
をthat
に割り当てました.リリースすることができません.バックした内部関数と一緒にクローズドされていますので、that
を指しています.したがって、タイトル2の最終結果は「My Object」です.生気が出る
このようにthisという概念を見ると非常に不思議で、多くの対象方面の知識が含まれています.彼の各種の応用方法と原理を徹底的に理解することに対して、非現実的な幻想を生み出しました.その後の文を書く未来のために、私に任せて整理します.
これが見えるのは全部本当の愛です.