this 指向二-----构造函数的this指向

在函数中,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);

}

}

}


var p1=new Person;//构造函数没有形参时可以省略括号

p1.showName();//调用这个方法的时候,showName方法的this指向p1,self也是指向的是执行new创建并且初始化的空对象; 得到的值是lishi;


总结:不管构造函数是否有return对象,用new执行函数都会创建一个空对象并且试图初始化这个空对象,如果没有return语句或者return语句没有值或者return一个原始值的话

,函数执行的返回值就会是这个新创建的对象。但是,但是,但是如果有return一个对象的话,就会直接返回return的这个对象,不会返回新创建的对象,但是确实有新建一个对象并初始化,上面代码中的self就是永远指向这个新创建的对象,因为在return之前self就已经把this的地址保存起来了,所以不管this指向哪里都不会影响到self。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值