抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

this

解析器在调用函数每次都会向函数内部传递进一个隐含的参数,这个隐含的参数就是this,this指向的是一个对象,这个对象我们称为函数执行的 上下文对象。

根据函数的调用方式的不同,this会指向不同的对象:【重要】

  • 1.以函数的形式调用时,this永远都是window。比如fun();相当于window.fun();

  • 2.以方法的形式调用时,this是调用方法的那个对象

  • 3.以构造函数的形式调用时,this是新创建的那个对象

  • 4.使用call和apply调用时,this是指定的那个对象

针对第1条的举例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function fun() {
console.log(this);
console.log(this.name);
}

var obj1 = {
name: "smyh",
sayName: fun
};

var obj2 = {
name: "vae",
sayName: fun
};

var name = "全局的name属性";

//以函数形式调用,this是window
fun(); //可以理解成 window.fun()

打印结果:

1
2
Window
全局的name属性

上面的举例可以看出,this指向的是window对象,所以 this.name 指的是全局的name。

第2条的举例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function fun() {
console.log(this);
console.log(this.name);
}

var obj1 = {
name: "smyh",
sayName: fun
};

var obj2 = {
name: "vae",
sayName: fun
};

var name = "全局的name属性";

//以方法的形式调用,this是调用方法的对象
obj2.sayName();

打印结果:

1
2
Object
vae

上面的举例可以看出,this指向的是 对象 obj2 ,所以 this.name 指的是 obj2.name。

箭头函数中this的指向

ES6中的箭头函数并不会使用上面四条标准的绑定规则,而是会继