javascriptの「this」を深く理解する
2408 ワード
今までjsの中のthisに対して、理解が足りなくて、同じくいつもいじられて頭がくらくらして転向して、最近《js**》のこの本の中で、thisに関しての説明を見て、とても道理があると感じて、次にみんなに分かち合います.
JavaScriptは弱いタイプの言語で、他の言語とは全く違ったセットがあります. this の処理メカニズムを説明します
五種類ぐらいの違いで、this 指し示すものはそれぞれ違っています.いろいろな事情について説明します.
全体の範囲内
ブラウザで実行されているJavaScriptスクリプトは、このグローバルオブジェクトは window
関数の呼び出し
厳密なモードでは、グローバル変数は存在しません.この場合 this そうです undefined
メソッドの呼び出し
コンストラクタを呼び出す
明示的な設定 this
したがって、関数呼び出しのルールは上記の例では適用されなくなりました. 関数内 this barに設定されました.
よくある誤解
ほとんどの場合は過去のことを言いますが、最初のルールです. 全体の対象に向けて)JavaScript言語の別の間違った設計のところと考えられています.これは実際の用途がないからです.
にあるために test でペアを取得します Foo オブジェクトの参照は、 method 関数の内部にローカル変数の指向性を作成します. Foo オブジェクト
メソッドの割り当て式
もう一つの不思議なところは関数の別名、つまり一つの方法を変数に割り当てます.
とはいえ this の遅いバインディング特性は友好的ではないようですが、これは確実に原型に基づいて生きていく土壌を継承しています.
注意:
対象の文面ステートメント文法において、this オブジェクト自体を指してはいけません.したがって var obj={me:this} 的に命中する 私 objは指しません. this 上記の5つの場合にのみ発生します. この例では、ブラウザで実行するなら、Obj.me windowに等しい オブジェクト
ブログを参照してください:
http://www.jb51.net/onlineread/JavaScript-Garden-CN/
JavaScriptは弱いタイプの言語で、他の言語とは全く違ったセットがあります. this の処理メカニズムを説明します
五種類ぐらいの違いで、this 指し示すものはそれぞれ違っています.いろいろな事情について説明します.
全体の範囲内
this;
全体の範囲で使用する場合 thisは、全体のオブジェクトを指します.ブラウザで実行されているJavaScriptスクリプトは、このグローバルオブジェクトは window
関数の呼び出し
foo();
ここです this 全体のオブジェクトを指します.厳密なモードでは、グローバル変数は存在しません.この場合 this そうです undefined
メソッドの呼び出し
test.foo();
この例では、this 方向を指す test オブジェクトコンストラクタを呼び出す
new foo();
関数が和に傾いている場合 new キーワードを一緒に使うと、この関数は 構造関数関数の内部で、this 新しく作成したオブジェクトを指します.明示的な設定 this
function foo(a, b, c) {}
var bar = {};
foo.apply(bar, [1, 2, 3]);// ,
foo.call(bar, 1, 2, 3); // foo :a = 1, b = 2, c = 3
使用する Funtion.prototype 上の コール または appy メソッドの場合、関数内の thisは 関数呼び出しの最初のパラメータとして明示的に設定します.したがって、関数呼び出しのルールは上記の例では適用されなくなりました. 関数内 this barに設定されました.
よくある誤解
ほとんどの場合は過去のことを言いますが、最初のルールです. 全体の対象に向けて)JavaScript言語の別の間違った設計のところと考えられています.これは実際の用途がないからです.
Foo.method = function() {
function test() {
// this ( : window )
}
test();
}
よくある誤解は test 的に命中する this 指しています Foo 相手は、実はそうではありません.にあるために test でペアを取得します Foo オブジェクトの参照は、 method 関数の内部にローカル変数の指向性を作成します. Foo オブジェクト
Foo.method = function() {
var that = this;
function test() {
// that Foo
}
test();
}
that 私たちが勝手につけた名前ですが、この名前は外部に向けて広く使われています. thisオブジェクトはい、 包みを閉じる 一節を見ることができます. that パラメータとして渡すことができます.メソッドの割り当て式
もう一つの不思議なところは関数の別名、つまり一つの方法を変数に割り当てます.
var test =someObject.methodTest;
test();
上の例では、test 普通の関数が呼び出されるように.したがって、関数内の this もう届かない some Object オブジェクトとはいえ this の遅いバインディング特性は友好的ではないようですが、これは確実に原型に基づいて生きていく土壌を継承しています.
function Foo() {}
Foo.prototype.method =function() {};
function Bar() {}
Bar.prototype =Foo.prototype;
new Bar().method();
質に入れる method 呼び出し時、this 指しています Bar のインスタンスオブジェクトを指定します注意:
対象の文面ステートメント文法において、this オブジェクト自体を指してはいけません.したがって var obj={me:this} 的に命中する 私 objは指しません. this 上記の5つの場合にのみ発生します. この例では、ブラウザで実行するなら、Obj.me windowに等しい オブジェクト
ブログを参照してください:
http://www.jb51.net/onlineread/JavaScript-Garden-CN/