极简实现系列——手写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
}

完成了我们来测试下

 


版权声明:本文为laishaojiang原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。