What's this
2655 ワード
What's this
実行中のバインディングの特性のため、JavaScriptの
関数を使う場合によって、thisの値が変わります.しかし、全体的な原則があります.つまり、thisとは、関数を呼び出す対象のことです.
関数として呼び出す
関数が直接呼び出された場合、thisはグローバルオブジェクトにバインドされます.ブラウザでは、Windowsはこの全体のオブジェクトです.
関数ネストによって生成される内部関数の
documentを取得:
JavaScriptでは、関数もオブジェクトですので、関数はオブジェクトの属性として使用できます.このとき、この関数はオブジェクトと呼ばれる方法で、このような呼び出し方式を使用すると、thisはオブジェクトに自然に結合されます.
bindは、新しい関数を返し、関数内部のthisを着信の最初のパラメータにします.例示的変数:(this)クラスのインスタンスがアクセスできる変数 静的変数:(属性)直接型オブジェクトがアクセスできる変数 プライベート変数:(局所変数)現在のスコープ内で有効な変数
実行中のバインディングの特性のため、JavaScriptの
this
は、全体的なオブジェクト、現在のオブジェクト、または任意のオブジェクトとすることができ、これは関数の呼び出しに依存します.関数を使う場合によって、thisの値が変わります.しかし、全体的な原則があります.つまり、thisとは、関数を呼び出す対象のことです.
関数として呼び出す
関数が直接呼び出された場合、thisはグローバルオブジェクトにバインドされます.ブラウザでは、Windowsはこの全体のオブジェクトです.
console.log(this); //Window
function fn1(){
function fn2(){
console.log(this);
}
}
fn1(); //Window
入れ子コール関数ネストによって生成される内部関数の
this
は、親関数ではなく、依然として大域変数である.console.log(this); //Window
function fn1(){
function fn2(){
console.log(this);
}
fn2()
}
fn1(); //Window
set Timeout、set Intervaldocumentを取得:
document.addEventListener('click', function(e){
console.log(this);
var _this = this;
setTimeout(function(){
console.log(_this);
}, 200);
}, false);
オブジェクトメソッドとして呼び出すJavaScriptでは、関数もオブジェクトですので、関数はオブジェクトの属性として使用できます.このとき、この関数はオブジェクトと呼ばれる方法で、このような呼び出し方式を使用すると、thisはオブジェクトに自然に結合されます.
var obj1 = {
name: 'Byron',
fn : function(){
console.log(this);
}
};
obj1.fn();//Object {name: "Byron", fn: function}
var fn2 = obj1.fn;
fn2(); //window, window.fn2()
Function.prototype.bindbindは、新しい関数を返し、関数内部のthisを着信の最初のパラメータにします.
document.addEventListener('click', function(e){
console.log(this);
setTimeout(function(){
console.log(this);
}.bind(this), 200);
}, false);
callとappyを使ってthisを設定します. var value = 100;
var obj = {
value: 200
}
function fn(a,b){
console.log(this.value + a + b)
}
fn(3,4) //107
fn.call(obj,3,4) //207
fn.apply(obj, [3,4]) //207
行列の最大値を求めます.var arr = [1,3,12,3]
console.log( Math.max.apply(null, arr) ) //12
スティッチング文字列 function joinStr(){
//1.
console.log( Array.prototype.join.call(arguments, '-'))
//2.
var join = Array.prototype.join.bind(arguments);
console.log(join('-'))
}
joinStr('a','b','c')
三種類の変数function ClassA(){
var a = 1; // ,
this.b = 2; // ,
}
ClassA.c = 3; // , ,
console.log(a); // error
console.log(ClassA.b) // undefined
console.log(ClassA.c) //3
var classa = new ClassA();
console.log(classa.a);//undefined
console.log(classa.b);// 2
console.log(classa.c);//undefined