new本质与this指向问题

本文探讨了JavaScript中new操作符的本质,包括在内存中创建新对象,设置this指向新对象,执行构造函数以添加属性和方法,以及构造函数的返回规则。特别指出,如果构造函数返回一个对象,new命令将返回该对象,否则返回this所指的新对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

new的本质:
1.在内存中创建一个新的空对象
2.让this指向这个新的对象
3.执行构造函数里面的代码,给这个新的对象添加属性和方法
4.返回这个新的对象(所以构造函数里面不需要return)

如果构造函数内部有return语句,而且return后面跟着一个对象, new 命令会返回 return
语句指定的对象;否则,就会不管 return 语句,返回 this 对象


function myNew(func){
  //声明一个中间对象,该对象为最终返回的实例
  var obj = {}
  //将实例的原型指向构造函数的原型
  obj.__proto__ = func.prototype
  //ret为构造函数执行的结果,这里通过```apply```,将构造函数内部的```this```指向修改为指向```res```,即实例对象
  let res = func.apply(obj, arguments)
  //当我们在构造函数上明确指定了返回对象时,那么```new```的执行结果就是该返回对象
  if ((res !== null && typeof res === "object") || (typeof res === "function"){
  	return res
  }
  return obj
}
function A () {
  this.a = 1222222
}
console.log(myNew(A))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值