JavaScript 中的 This 指向

由于js是动态类型语言,所以this的指向并不是定义声明时就确定的,而是在程序运行时动态确定的

作为对象的方法调用:

1
2
3
4
5
6
7
8
9
10
var test = {
aFunc:function() {
console.log(this.b);
},
b:'in test func'
};
var b = 'out test func';
test.aFunc();

输出“in test func” ,this指向的是test 对象

作为普通函数调用:

1
2
3
4
5
6
7
function test (){
console.log(this.b);
}
var b = 'test';
test();

输出“test” 。this 指向的是window对象

构造器调用:

如 函数作为一个构造器使用,

1
2
3
4
5
6
7
function Test(name){
this.name = name;
}
var newT = new Test('tt');
console.log(newT.name);

输出 'tt'this 指向的是新创建的对象,如果构造函数的返回是一个对象,那么this返回该对象,否则返回新创建的对象

call 或 apply,bind 调用

call, apply ,bind都可以改变运行时this的指向。

1
2
3
4
5
6
7
8
9
10
11
12
var test1 = {
aFunc:function(){
console.log(this.name);
},
name:'test1'
}
var test2 ={
name: "test2"
};
test1.aFunc.apply(test2); //或者test1.aFunc.bind(test2)();

输出'test2'this指向的是 test2 对象。

call和apply没什么区别,只是传入的参数不一样,call传入的第一个参数是this的指向,从第二个参数开始一个个传入function中,
而apply第二个参数是function接受的参数的数组,如果传入的第一个参数为 null,this 会指向默认的宿主对象,浏览器中为window。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!