This的指向大致可以分为以下四类,我们分别举例说明
1. 作为对象的方法调用时,this指向该对象var obj={
a:1,
getA:function(){
console.log( this==obj); //输出true
console.log(this.a); //输出1
}
}obj.getA();
2. 作为普通函数调用时,this总是指向全局对象,比如说在浏览器中,这个全局对象是window。
window.name="windowname";
var getName=function(){
return this.name;
}
console.log(getName()); //输出windwoname
或者
window.name='windowname2';
var myObject={
name:'yourName',
getName:function(){
return this.name;
}
}
var getName=myObject.getName;
console.log(getName()); //windowname
console.log(myObject.getName());//yourName
3. 作为构造器调用
通常情况下,构造器里的this就指向返回的这个对象。例如:
var myClass=function(){
this.name='yourName';
}
var obj=new myClass();
console.log(obj.name); //输出yourName
但是当new调用构造器时,构造器显示的返回了一个object类型的对象,那么此次运算的最终结果会返回这个对象,不是我们之前期待的this。
如果返回的不是对象是别的比如说string类型的数据,就还是指向原来的this
var myClass=function(){
this.name='yourName';
return ’returnName’ ;
}
var obj=new myClass();
console.log(obj.name); //输出'yourName'
4. Function.prototype.call 或 Function.prototype.apply调用可以动态的改变传入的this的值
var obj1={
name:'name1',
getName:function(){
return this.name;
}
}
var obj2={
name:'name2'
}
console.log(obj1.getName()); //输出name1
console.log(obj1.getName().call(obj2)); /输出name2
至此 第一篇博客写完了, 本文中,我们讲了对this关键字做了一些简单的分析,也参考了一些书,在此,对他们表示感谢,如果能够帮助到你,我感到万分荣幸。 让大家见笑了