在函数中,this没有作用域和继承的概念,this的指向主要看调用的方式,详情请看this指向一,今天主要撸一撸当new 关键字调用函数时thsi内部的指向,分两种情况:
1.构造函数没有调用return语句或者调用return语句但是没有返回值或者返回一个原始值得时候
当new调用方法时,会创建一个空对象并且试图初始化这个空对象,这时this的指向自然就是指向这个新创建的对象了
2.构造函数有用return显示返回一个对象的时候,这时new 调用方法的返回值就是这个return 的对象,例如
function Person(){
this.age=18;
this.name="zhangshan";
var self=this;
this.showName=function(){
console.log(this.name);
}
}
var p1=new Person();
p1.showName();//调用这个方法的时候,showName方法的this指向p1,self也是指向p1; 得到的值是zhangshan
但是如果构造函数变成这样:
function Person(){
this.age=18;
this.name="zhangshan";
var self=this;
this.showName=function(){
console.log(this.name);
}
return {
“age":28,
"name":"lishi",
"showName":function(){
console.log(this.name);
}
}
}
p1.showName();//调用这个方法的时候,showName方法的this指向p1,self也是指向的是执行new创建并且初始化的空对象; 得到的值是lishi;
总结:不管构造函数是否有return对象,用new执行函数都会创建一个空对象并且试图初始化这个空对象,如果没有return语句或者return语句没有值或者return一个原始值的话
,函数执行的返回值就会是这个新创建的对象。但是,但是,但是如果有return一个对象的话,就会直接返回return的这个对象,不会返回新创建的对象,但是确实有新建一个对象并初始化,上面代码中的self就是永远指向这个新创建的对象,因为在return之前self就已经把this的地址保存起来了,所以不管this指向哪里都不会影响到self。