极简实现系列 是用最简单的代码实现一些常见的方法,目的是为了帮助理解原理,所以并没有考虑太多限制条件
这个在面试中经常会碰到,其实很简单,只要理解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
}
完成了我们来测试下