javascriptの中でthisは異なっているシーンの中の指し方の問題です.
1826 ワード
参考URL: https://www.jianshu.com/p/5f8440535a2a 匿名関数のthisは、グローバルオブジェクトを指す. set Intervalとset Timeoutタイマーの中のthisはグローバルオブジェクトを指す. evalのthisは呼び出しコンテキストのthisを指す. appyとcallのthisはパラメータの対象を指します. newバインディング、コンストラクションの中のthis指向 矢印関数のthisは、外層コードブロックのthisを継承します. 転載先:https://www.cnblogs.com/dadouF4/p/10647070.html
var a = 10;
var foo = {
a: 20,
fn: (function(){
console.log(this); // window
console.log(this.a); // 10
})()
}
var a = 10;
var oTimer1 = setInterval(function(){
var a = 20;
console.log(this.a); // 10
clearInterval(oTimer1);
},100);
(function(){
eval("console.log(this)"); // Window
})();
function Foo(){
this.bar = function(){
eval("console.log(this)"); // Foo
}
}
var foo = new Foo();
foo.bar();
var a = 10;
var foo = {
a: 20,
fn: function(){
console.log(this.a);
}
};
var bar ={
a: 30
}
foo.fn.apply();//10( , )
foo.fn.apply(foo);//20
foo.fn.apply(bar);//30
function setNum(num){
this.num= num;
}
var newObj = new setNum(10);
console.log('Hello,', newObj.num);
var obj = {
hi: function(){
console.log(this);
return ()=>{
console.log(this);
}
},
sayHi: function(){
return function() {
console.log(this);
return ()=>{
console.log(this);
}
}
},
say: ()=>{
console.log(this);
}
}
let hi = obj.hi(); // obj
hi(); // obj
let sayHi = obj.sayHi();
let fun1 = sayHi(); // window
fun1(); // window
obj.say(); // window