在js中解析器在调用函数每次都会向函数内部传递进一个隐含的参数,这个隐含的参数就是this,this指向的是一个对象,这个对象我们称为函数执行的 上下文对象。
-
根据函数的调用方式的不同,this会指向不同的对象。
- 以函数的形式调用时,this永远都是window(也就是我们说的顶层对象)
- 以方法的形式调用时,this就是调用方法的那个对象
this的情况
1.当以函数的形式调用时,this是window(也就是我们说的顶层对象)
2.当以方法的形式调用时,谁调用方法this就是谁
3.当以构造函数的形式调用时,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"); //this是谁? window
var p = new Person("yello"); //this是谁? p
p.getColor(); //this是谁? p
var obj = {};
p.setColor.call(obj, "black"); //this是谁? obj
var test = p.setColor;
test(); //this是谁? window
function fun1() {
function fun2() {
console.log(this);
}
fun2(); //this是谁? window
}
fun1();
1. this是什么?
- 任何函数本质上都是通过某个对象来调用的,如果没有直接指定就是window(顶层对象)
- 所有函数内部都有一个变量this
- 它的值是调用函数的当前对象
2. 如何确定this的值?
- test(): window
- p.test(): p
- new test(): 新创建的对象
- p.call(obj): obj