JavaScriptの中のthisは問題を指します.
2940 ワード
thisの方向:
ess 5では、thisの指差は作成時に確定できるものではなく、thisは永遠に最後に呼び出される対象を指す.
どのようにthisの方向を変えますか?は矢印関数を使用する. は関数内部で_を使用します.this=this は、appy、call、bindを使用する. newはオブジェクトを具体化する.
矢印関数のthis
矢印関数のthisは、常に関数定義時のthisを指します.実行時ではありません.矢印関数はこの文を覚えておく必要があります.「矢印関数にはthisバインディングがなく、その値は作用するドメインチェーンを検索することによって決定されなければなりません.矢印関数が矢印関数でない場合、thisバインディングされているのは一番近い矢印関数のthisです.そうでなければ、thisはundefinedです.」
関数内部で_を使うthis=this
ess 5では、thisの指差は作成時に確定できるものではなく、thisは永遠に最後に呼び出される対象を指す.
var name = "windowsName";
function a() {
var name = "Cherry";
console.log(this.name); // windowsName
console.log("inner:" + this); // inner: Window
}
a();
ここのa()はwindow.a()に相当します.だから最後のthisはずっとwindowの対象です.var name = "windowsName";
var a = {
name: "Cherry",
fn : function () {
console.log(this.name); // Cherry
}
}
a.fn();
注:この例では、関数fnはオブジェクトaから呼び出されるので、プリントの値はaのnameの値です.var name = "windowsName";
var a = {
name: "Cherry", // ,this.name undefined。
fn : function () {
console.log(this.name); // Cherry
}
}
window.a.fn();
注:thisは常に最後にそのオブジェクトを呼び出すことを指しますので、ここでthisはまだaオブジェクトを指します. var name = "windowsName";
var a = {
name : null,
// name: "Cherry",
fn : function () {
console.log(this.name); // windowsName
}
}
var f = a.fn;
f();
注:fnはaオブジェクトに割り当てられましたが、コールされませんでした.最後はまだwindowに呼び出されました.だから、thisはwindowを指します.どのようにthisの方向を変えますか?
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
ここのsetTimeout()関数では、thisはwindowを指していますが、windowオブジェクトはfunc 1を含んでいません.矢印関数のthis
矢印関数のthisは、常に関数定義時のthisを指します.実行時ではありません.矢印関数はこの文を覚えておく必要があります.「矢印関数にはthisバインディングがなく、その値は作用するドメインチェーンを検索することによって決定されなければなりません.矢印関数が矢印関数でない場合、thisバインディングされているのは一番近い矢印関数のthisです.そうでなければ、thisはundefinedです.」
var name = "windowsName";
var a = {
name : "Cherry",
func1: function () {
console.log(this.name)
},
func2: function () {
setTimeout( () => {
this.func1()
},100);
}
};
a.func2() // Cherry
注:ここの矢印関数内のthisは常にaオブジェクトですので、エラーが発生しません.関数内部で_を使うthis=this
var name = "windowsName";
var a = {
name : "Cherry",
func1: function () {
console.log(this.name)
},
func2: function () {
var _this = this;
setTimeout( function() {
_this.func1()
},100);
}
};
a.func2() // Cherry
ここでthisを予め_に保存します.thisの中に入っていますので、thisはずっとaの対象を指しています.