js中this用法

Javascript语言中,this代表函数运行时,自动生成的一个内部对象且只能在函数内部使用。
this的作用是指向调用函数的那个对象。

在javascript中this有四种用法:

第一种 普通的函数调用

这是函数的最通常用法,属于全局性调用,因此this就代表全局对象Global,指向的是window。

1
2
3
4
5
6
var x = 1;
function work(){
this.x = 0;
}
work();
alert(x); //0

第二种 作为对象方法的调用

函数可以作为某个对象的方法调用,这时this就指向调用这个函数的对象。

1
2
3
4
5
6
7
8
var x=1;
var way={
x:2,
work:function(){
alert(this.x);
}
}
way.work();//2

第三种 作为构造函数调用

所谓构造函数,就是通过这个函数生成一个新对象(object)。这时,this就指这个新对象。

1
2
3
4
5
6
var x=1;
function work(){
this.x=2;
}
var way = new work();
alert(way.x);//2

第四种 call调用,apply调用

call()、apply()都是函数对象的一个方法,它的作用是改变函数的调用对象

call用法


语法:call(Obj,arg1, arg2,….argN)
参数 Obj 可选项。将被用作当前对象的对象,即函数中this指向的对象。没有,就指向window。
参数 arg1, arg2,… argN 可选项。将被传递方法参数序列。

apply用法


语法:apply(Obj,[arg1,arg2,….argN])
参数 Obj 可选项。将被用作当前对象的对象,即函数中this指向的对象。没有,就指向window。
参数 [arg1, arg2,… argN] 可选项。在[]内是将被传递方法参数序列。

1
2
3
4
5
6
7
8
9
10
11
12
var age=30;
var obj2={
age:20
}
var obj={
age:10,
fun2:function(){
console.log(this.age)
}
}
obj.fun2.call(obj2); //20
obj.fun2.apply(obj2); //20

注意:使用call,apply方法并不能是参数 Obj 对象中添加函数,仅是调用。