js中的this(四种绑定)
默认绑定
非严格模式下:
var bar=2021;
function foo(){
var bar=1998;
console.log(this.bar);
}
foo();//2021
严格模式下:
"use strict"
var bar=2021;
function foo(){
var bar=1998;
console.log(this.bar);
}
foo();//Uncaught TypeError: Cannot read property ‘bar‘ of undefined
隐式绑定
var foo=1998;
function bar(){
console.log(this.foo);
}
var obj={
foo:2021,
bar:bar
}
obj.bar();//2021
隐式丢失
var foo=1998;
function bar(){
console.log(this.foo);
}
var obj={
foo:2021,
bar:bar
}
var baz=obj.bar;
baz();//1998
var foo=1998;
function bar(){
console.log(this.foo);
}
var obj={
foo:2021,
bar:bar
}
setTimeout(obj.bar,0)//1998
//setInterval和setTimeout中如果出现this,那么这个this指向的是window对象
硬绑定
var foo="我是全局 foo";
function bar(){
console.log(this.foo);
}
var obj1={
foo:"我是obj1 foo",
bar:bar
}
var obj2={
foo:"我是obj2 foo",
}
var obj3={
foo:"我是obj3 foo"
}
obj1.bar.apply(obj2)//我是obj2 foo
obj1.bar.call(obj3)//我是obj3 foo
new绑定
var foo="我是全局 foo";
function bar(foo){
this.foo=foo;
}
var baz=new bar("新传的bar");
console.log(baz.foo);//新传的bar
js中的this(四种绑定)