new操作符到底做了什么

new操作符到底做了什么

说起new第一反应就是创建对象实例化对象。然而实际上做了下面这些

  1. 创建一个空对象: 并且this变量引入该对象,同时还继承了函数的原型
var obj=new Object();
  1. 设置原型链 空对象指向构造函数的原型对象
obj.__proto__= Func.prototype;
  1. 执行函数体 修改构造函数this指针指向空对象,并执行函数体
var result =Func.call(obj);
  1. 判断返回值 返回对象就用该对象,没有的话就创建一个对象
if (typeof(result) == "object"){
  func=result;
}
else{
    func=obj;;
}

详细点说

  1. 获取实参中的第一个参数(构造函数),就是调用New函数传进来的第一个参数,暂时记为Constructor;

  2. 使用Constructor的原型链结合Object.create来创建一个对象,此时新对象的原型链为Constructor函数的原型对象;(结合我们上面讨论的,要访问原型链上面的属性和方法,要使用实例对象的__proto__属性)

  3. 改变Constructor函数的this指向,指向新创建的实例对象,然后call方法再调用Constructor函数,为新对象赋予属性和方法;(结合我们上面讨论的,要访问构造函数的属性和方法,要使用call或apply)

  4. 返回新创建的对象,为Constructor函数的一个实例对象

可以说new是用来做继承的,而创建对象的其实是Object.create(null)。 在new操作符的作用下,我们使用新创建的对象去继承了他的构造函数上的属性和方法、以及他的原型链上的属性和方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值