手写new操作符

先看一个基于构造函数+原型链模式下的创建的函数的形式

function Person(name,age){
this.name=name;
this.age=age
}
Person.prototype.getName=function(){
return this.name;}

再来了看一下一个new操作符需要完成那些事?

  1. 创建一个对象
  2. 在新创建的对象作用域下执行构造函数
  3. 返回对象

实现new操作符

定义new函数,参数的数量我们是不知道的,我们也不必得到精确的映射

function new(){}

实现第一步,创建一个对象,由于不能使用new方法,需要去找寻是否有合适的函数去辅助我们

Object.create() 创建一个新对象,使用现有的对象来提供新创建的对象的__proto__。

正好帮我们省去了将构造函数的原型添加到新对象上

Object.create(func.prototype)

第二步调用构造函数并且修改this指针

fun.apply(newObj, Array.prototype.slice.call(arguments, 1))

由于手写的形式不像new操作符那样,他的参数传递形式为

new1(Person,'wx','21')

第三步是返回这个新创建的对象

完整的代码

function new1(func) {
  var newObj = Object.create(func.prototype);   
  var returnObj = func.apply(newObj, Array.prototype.slice.call(arguments, 1));  
  return newObj;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值