前言
使用new调用一个函数,或者当class的constructor调用时,以下的操作将会被自动执行。
- 创建一个继承构造函数的空对象obj
- 绑定构造函数的this为空对象obj,并执行。
- 如果执行构造函数后返回了实例则返回这个实例,否则返回obj
具体的代码实现如下
function createNew(con,...args) {
// 继承原型上的属性和方法
let obj = Object.create(con.prototype);
// 继承实例上的属性
let target = con.apply(obj,args);
// 判断构造函数是否返回实例
return target instanceof con ? target : obj;
}
测试一下
function Person(name) {
this.name = name
}
const res = createNew(Person,'chris')
console.log(res.name) // "chris"