Javascriptにおけるthisの使い方
2226 ワード
私達はjsを書く時、特にコールバック関数を使う時、thisの指代の対象はいつも自分の考えから逸脱して変化が発生することができることを発見します.対象言語の特性に対してthisは常にその使用者を指すことを教えてくれます.jsでは、コールバック関数の内部のthisは、デフォルトではグローバル環境すなわち最終コンテキストを指しています.だから、thisオブジェクトの宣言バインディングをしないと、エラーが発生し、私たちが欲しい値が見つけられなくなります.関数宣言式は、returnオブジェクトがありません.このとき、関数内のthisはグローバルwindow に相当します.を対象とした方法で呼び出すと、thisは上位 を指す.は構成関数として呼び出され、thisはnewのオブジェクトを指す.コンストラクタは一般的に頭文字が大文字で、newでオブジェクトを宣言して、普通のfunction を区別します.関数は、returnオブジェクトがあるとき、thisは、構造関数オブジェクト自体を指します.returnは複数の値を返し、オブジェクトの属性によってアクセスします. ES 6に矢印関数が導入され、矢印関数はオペレータ=>で定義されている.矢印関数は、上の4つのthisバインディング規則を使用せずに、外層作用領域に基づいてthisを決定します.foo内部の矢印関数が作成されると、foo関数内のthisがObj 1に結合され、bar(矢印関数)のthisもObj 1に結合されます.矢印関数内のthisは修正されません. 参考文献1、JSにおけるthisの4つの用法
function test(){
this.a = 1;
console.log(a);
}
test(); //1
console.log(a); //1
console.log(this.a); //1
console.log(window.a); //1
//
function test(){
var a = 1;
console.log(a); //1
console.log(this.a); //undefined
}
test();
function test(){
console.log(this.x);
}
var o = {};
o.x = 1;
o.m = test;
o.m(); // 1
var x = 2;
function Test() {
this.x = 1; // this
}
var o = new Test();
console.log(o.x); // 1
console.log(this.x); //2
function Test() {
this.b = 1; //this = Test{}
return {
a: 2
}
}
var o = new Test();
console.log(o.a); // 2
console.log(this.b); //undefined
// JavaScript : return , , ; return ( , , ), ;
function Super(a){
this.a=a;
return 123;
}
Super.prototype.sayHello=function(){
console.log("Hello")
}
function Super1(a){
this.a=a;
return {a:2};
}
Super1.prototype.sayHello=function(){
console.log("Hello")
}
console.log(new Super(1)); // Super{a:1}, sayHello
console.log(new Super1(2)); // Object{a:2}, sayHello
function foo() {
// this.b = 1; //this = Test{}
return (a) => {
console.log(this.a);
};
}
var obj1 = { a: 2 };
var obj2 = { a: 3 };
var bar = foo.call(obj1);
bar.call(obj2); // 2