前端面试 - 手写new
原理
- 创建一个新对象
- 使这个新对象的原型链 __ proto __ 指向原型 prototype
- 改变this指向(指向这个obj)并立即执行,将执行结果保存起来作为result
- 判断之前的结果是不是 null 或着 undefind,若是则返回之前的新对象 ,不是则返回result
代码
// 创建一个new方法
function myNew(fn, ...args) {
// 创建一个空对象
let obj = {}
// 使空对象的隐式原型指向原函数的显式原型
obj.__proto__ = fn.prototype
// this指向obj
let result = fn.apply(obj, args);
// 返回
return result instanceof Object ? obj : result;
}