原理
new 关键字在使用时会进行如下的操作:
- 创建一个空的简单JavaScript对象(即{});
- 为步骤1新创建的对象添加属性
__proto__
,将该属性链接至构造函数的原型对象 ; - 将步骤1新创建的对象作为this的上下文 ;
- 如果该函数没有返回对象,则返回this。
实现
function my_New(fn, ...args) {
let obj = {} // 创建一个空对象
obj.__proto__ = fn.prototype // 使空对象的隐式原型指向原函数的显式原型
let result = fn.apply(obj, args) // this指向obj
return result instanceof Object ? result : obj // 返回
}
使用
function person(){
this.name='joney'
this.age=18
}
var p = my_New(person)
console.log(p);