首页 > 代码库 > JS this指向
JS this指向
JS中,this的值取决于调用的模式,而JS中总有4中调用模式:
1.方法调用模式:
当一个函数被保存为对象的一个属性时,我们称它为一个方法,当一个当法被调用时,this指向改对象,如:
var obj = {
value : 1,
getValue : function(){
alert(this.value);
}
};
obj.getValue(); //输出1,此时的this指向obj
注意: 该模式下,this到对象的绑定发生在方法被调用的时候。
2.函数调用模式:
当一个函数并非一个对象的属性时,它被当作一个函数来调用,此时this指向全局对象(window),如:
window.value = http://www.mamicode.com/1;
function getValue (){
alert(this.value);
};
getValue(); //输出1,此时的this指向window
3.构造器调用模式:
结合new前缀调用的函数被称为构造器函数,此时的this指向该构造器函数的实例对象,如:
function show(val){
this.value = http://www.mamicode.com/val;
};
show.prototype.getVal = function(){
alert(this.value);
};
var func = new show(1);
func.getVal(); // 输出1
alert(func.value) //输出1
// 从上面的结果,可以看出,此时的this指向了func对象
4.apply/call 调用模式
apply 和 call 方法可以让我们设定调用者中的this指向谁,如:
var fun = function(str){
this.status = str;
}
fun.prototype.getStatus = function(){
alert(this.status);
}
var obj = {
status : "loading"
};
fun.prototype.getStatus.apply(obj); //输出”loading“ ,此时getStatus方法中的this指向了obj
补充说明:
call方法:
语法:call( [ thisObj [ , arg1 [ , arg2 [ , [ , .argN] ] ] ] ] )
定义:调用一个对象的一个方法,以另一个对象替换当前对象。
说明:call方法可以用来代替另一个对象调用一个方法。call方法可将一个函数的对象上下文从初始的上下文改变成由thisObj指定的新对象。
如果没有提供thisObj参数,那么Global对象被用作thisObj。
apply方法:
语法:apply( [ thisObj [ , argArray ] ] )
定义:应用某一对象的一个方法,用另一个对象替换当前对象。
说明:
如果argArray不是一个有效的数组或者不是arguments对象,那么将导致一个TypeError
如果没有提供argArray 和 thisObj 任何一个参数,那么Global对象将被用作thisObj,并且无法被传递任何参数
取自 : 《JavaScript 语言精髓》
JS this指向