一、一般函数调用
以下代码,属于全局性调用,this代表全局对象。
var a = 1;
function foo() {
console.log(this.a);
}
foo(); // 1
1
2
3
4
5
二、作为对象方法调用
以下代码,this指向上层对象即obj。
function foo() {
console.log(this.x);
}
var obj = {};
obj.x = 1;
obj.foo = foo;
obj.foo(); // 1
1
2
3
4
5
6
7
三、作为构造函数调用
所谓构造函数,是指通过这个函数,可以生成一个新对象。
var x = 5;
function foo() {
this.x = 1;
}
var obj = new foo();
console.log(obj.x); // 1
console.log(x); // 5
1
2
3
4
5
6
7
8
obj.x = 1 表明foo函数内的this不是全局对象,this指向新对象obj,全局变量x的值不变。
四、apply、call、bind调用
具体区别:https://blog.csdn.net/qq_24917475/article/details/90702539
apply()是函数的一个方法,作用是改变函数的调用对象。第一个参数表示改变后的调用这个函数的对象。因此,this指向的是第一个参数。
apply()参数为空时,默认为全局对象。
var x = 0;
function foo() {
console.log(this.x);
}
var obj = {};
obj.x = 1;
obj.foo = foo;
obj.foo(); // 1
obj.foo.apply(); // 0
obj.foo(); // 1
————————————————
版权声明:本文为CSDN博主「Say Something」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_24917475/article/details/90696826
- 复制链接
- 举报