this是什么?
- 任何函数本质上都是通过某个对象调用的,如果没有直接指定就是window
- 所有函数内部都有一个变量this
- 它的值是调用函数的当前对象
this的情况:
- 以函数形式调用时,this永远都是window
- 以方法的形式调用时,this是调用方法的对象
- 以构造函数的形式调用时,this是新创建的那个对象
- 使用call和apply调用时,this是指定的那个对象
- 箭头函数:箭头函数的this看外层是否有函数
如果有,外层函数的this就是内部箭头函数的this
如果没有,就是window - 特殊情况:通常意义上this指针指向为最后调用它的对象。这里需要注意的一点就是如果返回值是一个对象,那么this指向的就是那个返回的对象,如果返回值不是一个对象那么this还是指向函数的实例
如何确定this的值
- p(): window
- new p() : 新创建的对象
- pp.p() : pp
- pp.call(obj) : obj
代码
function p(c){
console.log("111",this);
this.color = c;
this.getColor = function(){
console.log("gggg",this);
return this.color;
}
this.setColor = function(c){
console.log("sssss",this);
this.color = c;
}
}
p("red");
let pp = new p("yello");
pp.getColor();
let obj = {};
pp.setColor.call(obj,"black");
let test = pp.setColor;
test();
function fun1(){
function fun2(){
console.log("fffff",this);
}
fun2();
}
fun1();