this的指向分为以下四种
1.作为对象的方法调用
2.作为普通函数调用
3.构造器调用
4.Function.prototype.call或Function.protype.apply调用
1.作为对象的方法调用
this指向该对象
var obj = {
a : 1,
getA : function(){
alert( this === obj);
alert( this.a );//输出1
}
}
2.作为普通函数调用
this指向全局对象
window.name = 'globalName';
var getName = function(){
return this.name;
};
console.log( getName() );//输出globalName
//--------------------------------------------------------
//或者
//--------------------------------------------------------
window.name = 'globalName';
var myObject = {
name : 'sven;,
getName : function(){
return this.name;
}
};
var getName = myObject.getName;
console.log( getName() );//globalName;
3.构造器调用
javascript中没有类,但是可以从构造器中创建对象,同时也提供了new运算符,使得构造器看起来更像一个类。构造器的外表和普通函数一模一样,他们的区别在于被调用的方式。当用new运算符调用函数是,该函数总会返回一个对象,通常情况下,构造器里的this就会指向返回的这个对象。
var MyClass = fucntion(){
this.name = 'sven';
//构造器没有显式返回对象
//return 'anne';
};
var obj = new MyClass();
alert( obj.name );//输出sven
4.Function.prototype.call或Function.protype.apply调用
两个函数可以动态改变传入函数的this
var obj1 = {
name : 'sven',
getName : function(){
return this.name;
}
};
var obj2 = {
name : 'anne'
};
console.log( obj1.getName() );//sven
console.log( obj1.getName.call( obj2 ) );//anne
网友评论