javascript改变this指向的3种方法(代码说明)

我们用例子来说明问题

隐式转换

1
2
3
4
5
6
7
8
9
10
11
12
13
var id = 10;
function a() {
console.log(this.id);
};
var obj2 = {
id: 30
}
var obj1 = {
id: 20
}
a.call(obj2);//30
a.call(obj1);//20
//a函数内的this指向随着call的指向而变化

显示转换

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var id = 10;
function a() {
console.log(this.id);
};
var obj2 = {
id: 30
}
var obj1 = {
id: 20
}

//使用bind之后, 返回的函数内部this定死, 无法再改变this
var b = a.bind(obj2);//返回一个函数
b.call(obj1);//30
b();//30

new

1
2
3
4
5
6
7
function a() {
this.a = 1;
this.b = 2;
}

var a1 = new a();
//this指向对象