thisの方向を変更します.
8905 ワード
thisの指向
ES 5では、thisは、最後にそのオブジェクトを呼び出すことを永遠に指します.
thisは永遠に最後にそのオブジェクトを呼び出します.ここで呼び出したオブジェクトはwindowです. ES 6矢印関数 を使用する.は関数内部で_を使用します.this=this appy call bind を使用する.*new一例示オブジェクト 1 ES 6矢印関数を使用する
矢印ではなく、最後にsetTimeoutを呼び出すオブジェクトはwindowですが、windowにはFnc 1関数がありません.
2関数内部で_を使うthis=thisは先にこの関数を呼び出すオブジェクトを変数_に保存します.thisでは、関数でこの_を使います.this、thisは変わりません.
3 appy call bindを使う
アプリを使って、thisの方向を変えます.
ES 5では、thisは、最後にそのオブジェクトを呼び出すことを永遠に指します.
thisは永遠に最後にそのオブジェクトを呼び出します.ここで呼び出したオブジェクトはwindowです.
var name="windowsName";
function a(){
var name="Cherry";
console.log(this.name); //windowsName
console.log("inner:"+this);//window
}
a();
console.log("outer:"+this);//window
ここで呼び出したオブジェクトはaです.var name="windowsName";
var a={
name:"Cherry",
fn:function(){
console.log(this.name); //Cherry
}
}
a.fn();
window.a.fn();
ここで関数を呼び出すオブジェクトは依然としてaですが、aのnameは定義されていませんので、undefinedです.var name="windowsName";
var a={
//name:"Cherry",
fn:function(){
console.log(this.name); //Cherry
}
}
a.fn();
window.a.fn();
ここではaオブジェクトのfnメソッドを変数fに割り当てましたが、呼び出しがないので、fnはまだwindowで呼び出されています.var name="windowsName";
var a={
name:"Cherry",
fn:function(){
console.log(this.name); //windowsName
}
}
var f=a.fn;
f();
thisの向きを変える矢印ではなく、最後にsetTimeoutを呼び出すオブジェクトはwindowですが、windowにはFnc 1関数がありません.
var name = "windowsName";
var a = {
name : "Cherry",
func1: function () {
console.log(this.name)
},
func2: function () {
setTimeout( function () {
this.func1()//
},100);
}
};
a.func2();// this.func1 is not a function
矢印関数を使用して、矢印関数のthisは常に関数定義時のthisを指します.実行時のものではなく、「矢印関数にthisバインディングがなく、作用するドメインチェーンを検索してその値を決定しなければなりません.矢印関数が非矢印関数に含まれている場合、thisは一番近い矢印関数のthisで結合されます.さもなければ、thisはundefinedです.」2関数内部で_を使うthis=thisは先にこの関数を呼び出すオブジェクトを変数_に保存します.thisでは、関数でこの_を使います.this、thisは変わりません.
var name="windowsName";
var a={
name:"Cherry",
fun1:function(){
console.log(this.name);
},
fun2:function(){
var _this=this;
setTimeout(function(){
_this.fun1();
},100);
}
};
a.fun2(); //Cherry
fun 2に、_を設定しますthis=this、ここでのthisはfun 2のオブジェクトaを呼び出して、fun 2の中のsetTimeoutがwindowに呼び出されるのを防ぐために、set Timeoutの中のthisはwindowで、this(変数aを指す)を変数に割り当てます.this、このように、fun 2で_を使います.thisは対象aを指します.3 appy call bindを使う
アプリを使って、thisの方向を変えます.
var name="windowsName";
var a={
name:"Cherry",
fun1:function(){
console.log(this.name);
},
fun2:function(){
setTimeout(function(){
this.fun1();
}.apply(a),100);
}
};
a.fun2();
コールを使う var name="windowsName";
var a={
name:"Cherry",
fun1:function(){
console.log(this.name);
},
fun2:function(){
setTimeout(function(){
this.fun1();
}.call(a),100);
}
};
a.fun2();
ビッドを使うvar name="windowsName";
var a={
name:"Cherry",
fun1:function(){
console.log(this.name);
},
fun2:function(){
setTimeout(function(){
this.fun1();
}.bind(a)(),100);
}
};
a.fun2();
callとappylの違いは、基本的に似ています.知識が入ってきたパラメータは、異なるcallでいくつかのパラメータリストを受け取り、applyは複数のパラメータを含む配列を受け入れることができます.var a={
name :"Cherry",
fn:function(a,b){
console.log(a+b)
}
}
var b=a.fn;
b.apply(a,[1,2]);
var a={
name :"Cherry",
fn:function(a,b){
console.log(a+b)
}
}
var b=a.fn;
b.call(a,1,2);