jsの関数コンテキストは
まずは小さな洋ナシから
function A() {
this.m = 10;
}
function B() {
this.m = 20;
}
A.call(B);
B.call(A);
let a = new A();
let b = new B();
console.log(a.m==B.m); // true
console.log(b.m==A.m); // true
戯言は抜きにして、コードと結論へ。
let a = 20;
let obj = {
a:10,
b:function(){
return this.a++;
}
}
console.log(obj.b()); //10
console.log(obj.a); //11
var a = 20;
let obj = {
a:10,
b:function(){
setTimeout(function(){
console.log(this.a); //20
},100);
}
}
obj.b();
しかし、varをletに置き換えるとどうなるでしょうか?
let a = 20;
let obj = {
a:10,
b:function(){
setTimeout(function(){
console.log(this.a); //undefined
},100);
}
}
obj.b();
結果:未定義
結論:letの小さな特徴として、グローバルではletで宣言された変数はwindowに属さなくなります。
-> 少しケース練習をしましょう!
var b = 20;
const obj = {
b:10,
c:function(){
setTimeout(function(){
return this.b++;
},100);
}
}
console.log(obj.c());
プリントを測定した結果は?