在几个月之前,我初次接触this时,对于this的指向问题始终不清晰。
在经历过this始终指向被调用的对象的理解,到今天,具体的总结this的几种调用方法的过程中,感触颇深。
关于this,大概有以下几种调用方式。
1.作为对象方法调用时,this指向该对象,这是最为常用的调用方式。
举个例子:
var obj = {name : "zhangsan",
getName: function(){
alert(this.name)
}
}
obj.getName();//输出zhangsan
2.作为普通函数调用时,this指向window。
在之前的例子里做一些改动
var name = "lisi"
var obj = {
name : "zhangsan",
getName: function(){
alert(this.name)
}
}
obj.getName();//zhangsan
var nameget = obj.getName
nameget();//lisi
这种调用方式和对象方法调用很容易混淆,其比较明显的特征是,声明一个函数,再将对象方法赋值给它,再调用该函数,其中牵扯的最根本的原因与闭包和原型有关,暂时不做解释。
3.通过隐式调用(new),也可以称之为构造器调用;具体事例可以参考js高级程序设计;js设计模式与开发模式;
4.显示调用,通过apply,call绑定this对象,this指向所绑定的对象,显式调用比隐式调用的优先级要高。具体实例如上。
5.with,eval