javascript this指针详解

发布者: xiaozhimn

this指针代表了函数运行时生成的一个内部对象,至于这个this指向谁取决于他生成的方式,this关键字虽然会根据环境变化,但是它始终指向的是调用当前函数的那个对象。在js中调用函数的模式可以分为4种:方法调用模式、函数调用模式、构造器调用模式、apply调用模式。这些模式在如何初始化关键参数this上存在差异。

方法调用模式

var name = "window";  
var obj = {  
  name: "obj",  
  getName: function(){  
    alert(this.name);  
  }  
}  
obj.getName(); 
解释:getName函数作为对象obj的方法调用,所以函数体中的this就代表obj对象。

函数调用模式

var name = "window";  
function getName(){  
  alert(this.name);  
}  
getName();
解释:getName函数是一个单独函数(非某对象方法),所以创建后就归属到了window对象之下,调用时this指向window

构造器调用模式

function obj(){  
  this.name = "obj";  
}  
var o = new obj();  
alert(o.name);
解释:  使用new创建对象o时,在构造函数中this指向了o,因此o的name属性被赋值为“obj”。 

apply调用模式

var name = "window";  
var obj = {  
  name : "obj"  
};  
function getName(){  
  alert(this.name);  
}  
getName.apply();  
getName.apply(obj);
解释: 直接调用函数对象getName的apply方法,由于没有参数,所以被划归到了全局作用域中,this指向了window对象;
将getName函数在obj对象上调用,函数体内的this也就指向了obj对象; 

this的产生模式也无非就是以上四种,万变不离其宗,你学会了吗?

0赞