矢印機能は、独自のthis
、彼ら近い上を持っていないので呼び出しコンテキストの。しかし、矢印以外の関数がバインドされていない場合は、と呼ばれる方法でに基づいてthis
を取得します。
obj.getScopeWithArrow();
obj.getScopeWithAnonymous();
最初のケースでは、再び、矢印機能は取得していない独自のあなたがそれを呼び出しているかthis
ので、それは問題ではない:私はあなたがこのようにこれらの関数を呼び出していると仮定します。 2番目のケースでは、はとなりますので、this
は同じオブジェクトを参照します。obj
を参照してください。
別に:this
のみundefined
がstrictモードにすることができるので、あなたの例では、あなたは、strictモードでなければなりません。
別に2:あなたのメソッド名に関して:this
と「スコープ」はお互いに非常に少ししかありません。
いくつかの例:
function showThis(label, t) {
if (t === window) {
console.log(label, "(global object)");
} else {
console.log(label, t);
}
}
// Loose mode by default in a non-module script element
let obj = {
arrow:() => {
showThis("arrow says ", this);
},
normal: function() {
showThis("normal says ", this);
}
};
obj.arrow(); // global object (window on browsers)
obj.normal(); // obj
function foo() {
// Here, we're in strict mode
"use strict";
let obj = {
arrow:() => {
showThis("arrow says ", this);
},
normal: function() {
showThis("normal says ", this);
}
};
obj.arrow(); // undefined
obj.normal(); // obj
}
foo();
developer.mozilla.orgによれば
ます。https://developer.mozilla。org/ja-ja/docs/Web/JavaScript /リファレンス/関数/ Arrow_functions#No_binding_of_this –
@ T.J.Crowder何か矢印関数について特別なので、私はそれを投影しました。 –
Google検索:[site:stackoverflow.com javascript this undefined in arrow機能](https://www.google.com/search?q=site%3Astackoverflow.com+javascript+this+undefined+in+arrow+function) –