1.this指向它的调用对象
function getA(){ var a = 1; console.log(this); //window console.log(this.a); //undefined } getA(); //等价于window.getA() var getA={ a:"1", fn:function(){ console.log(this.a) //1 } } getA.fn(); //此时this指向对向getA var getA={ a:1, fn:function(){ console.log(this.a) //1 } } window.getA.fn(); //此时this仍然指向getA(),this只会指向他的上一级 var getA={ a:1, b:{ a:5, fn:function(){ console.log(this.a); //5 } } } getA.b.fn(); var getA={ a:1, b:{ a:5, fn:function(){ console.log(this.a); //undefined } } } var c = getA.b.fn; c(); //fn赋值给变量C时没有执行,所以最终指向是window 2.new会改变this的指向 function getA(){ this.a = 1; } var b = new getA(); console.log(b.a); //1,new等于将getA()复制了一份到对象B中 function getA(){ this.a = 1; return{}; } var b = new getA(); console.log(b.a); //undefiend function getA(){ this.a = 1; return function(){}; } var b = new getA(); console.log(b.a); //undefiend function getA(){ this.a = 1; return 1; } var b = new getA(); console.log(b.a); //1 function getA(){ this.a = 1; return undefined; } var b = new getA(); console.log(b.a); //1 function getA(){ this.a = 1; return null; } var b = new getA(); console.log(b.a); //1 3.call,apply会改变this指向 var getA={ a:1, fn:function(){ console.log(this.a); } } var b = getA.fn; b.call(getA); call可以添加多个参数 var getA={ a:1, fn:function(c,d){ console.log(this.a); //1 console.log(c+d); //7 } } var b = getA.fn; b.call(getA,3,4); apply与call类似,但是apply的第二个参数必须是数组 var getA={ a:1, fn:function(){ console.log(this.a); //1 } } var b = getA.fn; b.apply(getA); var getA={ a:1, fn:function(c,d){ console.log(this.a); //1 console.log(c+d); //7 } } var b = getA.fn; b.call(getA,[3,4]); 如果call和apply的第一个参数写的是null,则指向windowthis的指向
2023-11-25 09:30:28