javaScript this詳細

2637 ワード

JavaScript this詳細
jsでは、thisは主に3つの場所に現れます.グローバルコードセグメント、関数コードセグメント、evalコードセグメント(実際には、jsコードはこの3つのタイプしかありません.)
グローバルコードセグメントでは、thisはグローバルオブジェクトの参照であり、クライアントjsでは、オブジェクトwindowである.
    consolethis,    ,this    window
evalコードセグメントでは、thisはeval環境を呼び出すthisと同じである.
eval('console.log(this);');
function f(){
    var that = this;
    eval('console.log(this);');
    eval('console.log(this == that)');
}
var o={};
o.f = f;
o.f();
関数コードセグメントでは、thisが複雑であり、thisは、この関数を呼び出すオブジェクトである(注意:Activation Objectとは異なる).
var id = 'global';
var o = {
    id: 'o',
    f1: function(){
        console.log(this.id)
    }
}
o.f1();            //o
f = o.f1
f()                //global 
上の例は簡単で、ネスト関数の問題については複雑ですが、thisが常にこの関数を呼び出すオブジェクトを指すことを覚えておけばいいです.
var id = 'global';
function f1(){
    var id = 'f1';
    function f2(){
        var id = 'f2';
        console.log(this.id);
    }
    return f2;
}
f1()();     //global
以上のthisについての説明はデフォルトです.thisが指すオブジェクトを変更したいなら、appy()、call()、bind関数(これらの関数はFunctionオブジェクトの属性方法です.)