this是什么
- 任何函数本质上都是通过某个对象来调用的,如果没有指定就是window
- 任何函数内部都有一个变量this
- 它的值是调用函数的当前对象
function Person(color){
console.log(this)
this.color = color;
this.getColor = function (){
console.log(this)
return this.color
};
this.setColor = function (color){
console.log(this)
this.color = color
};
}
Person("red");
var p = new Person("yellow");
p.getColor();
var obj = {};
p.setColor.call(obj,"black");
var test = p.setColor;
test();
function fn1(){
function fn2(){
console.log(this);
}
fn2();
}
fn1();
如何确定this
- test():window
- p.test():p
- new test():新创建的对象
- p.call(obj):obj
换言之:
- 以函数的形式调用时,this永远都是window
- 以方法的形式调用时,this就是调用方法的对象
- 以构造函数的形式调用时,this就是新创建的对象
- 使用call和apply调用时,this就是指定的那个对象
- 在全局作用域中this代表window