极简实现系列——手写new

极简实现系列 是用最简单的代码实现一些常见的方法,目的是为了帮助理解原理,所以并没有考虑太多限制条件


这个在面试中经常会碰到,其实很简单,只要理解new运算符做了什么就可以了。去MDN上查找关于new运算符的解释:

四个步骤,我们一步一步来实现,

先做个准备工作,想下我们想实现什么样的效果,是不是这样:

// new 运算符
let man = new Person()

// 自己即将实现的myNew运算符
let women = myNew(Person)

好的,接下就按照MDN的说明一步一步实现 

1.创建一个空的简单JavaScript对象(即{});

function myNew(fn){
    let obj = {}
}

2.链接该对象(即设置该对象的构造函数)到另一个对象 

function myNew(fn){
    let obj = {}
    obj.__proto__ = fn.prototype
}

3.将步骤1新创建的对象作为this的上下文 ;

function myNew(fn){
    let obj = {}
    obj.__proto__ = fn.prototype
    fn.call(obj)
}

4.如果该函数没有返回对象,则返回this 

function myNew(fn){
    let obj = {}
    obj.__proto__ = fn.prototype
    let r = fn.call(obj)
    return typeof r === 'object' ? r : obj
}

完成了我们来测试下

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值