javascript的this

时间:2023-03-09 15:52:10
javascript的this

关于JavaScript中的this的取值:

函数在创建的时候,会创建两个隐藏属性:函数的上下文、实现函数行为的代码(调用属性);以及prototype属性、length属性。

函数在调用的时候,除了声明时定义的形式参数,还接收两个附加参数:this和arguments。

 

this的值取决于函数的调用模式,函数有4种调用模式:方法调用模式、函数调用模式、构造函数调用模式、apply调用模式。

1. 方法调用模式:

函数作为对象的属性被调用时叫做方法。调用表达式中有提取属性的动作(点、[]),那么它就被当作一个方法来调用。

此时,this被绑定到该对象上。

this到对象的绑定发生在调用的时候。这种超级“延迟”绑定的好处是函数可以对this高度复用。

例子:

function test() {
alert(this.x);
}
var o = {};
o.x = 1;
o.m = test;
o.m();//1

2. 函数调用模式:

函数不是作为对象的属性被调用。此时,this被绑定到全局对象。

例子:

var x = 1;
function test() {
alert(this.x);
}
test(); //1

3.  构造函数调用模式:

通过new操作符调用构造函数,此时this绑定到新创建的对象实例上。

构造函数内的return返回值可以改变this值。如果return返回的是对象(null除外),则this绑定到该对象;其他情况,this绑定到新创建的对象实例上。

例子:

function fn() {
this.user = '追梦子';
return {};
}
var a = new fn;
console.log(a.user); //undefined

4. apply调用模式:

apply方法构建一个参数数组传递给构造函数。允许我们选择this值。

接收两个参数:第一个参数是要绑定给this的值,第二个参数是一个参数数组。

例子:

var x = 0;
function test() {
alert(this.x);
}
var o = {};
o.x = 1;
o.m = test;
o.m.apply();//0

阅读文章:

1. 《JavaScript》语言精粹第4章函数

2. 阮一峰的网络日志 《JavaScript的this用法》 网址:http://www.ruanyifeng.com/blog/2010/04/using_this_keyword_in_javascript.html

3. 追梦子的博客 《彻底理解js中this的指向》 网址:http://www.cnblogs.com/pssp/p/5216085.html