// 实现new关键词
// (1) 创建一个新对象(通过 Object.create 创建构造函数原型的对象)
// (2) 将构造函数的作用域赋给新对象(因此 this 就指向了这个新对象
// (3) 执行构造函数中的代码(为这个新对象添加属性)
// (4) 返回新对象
function Hero(name, job) {
this.name = name;
this.job = job
}
Hero.prototype.fire = function (params) {
console.log(`${this.name}发起攻击`);
}
const newI = function (Parent, ...rest) {
// 1.以构造器的prototype属性为原型,创建新对象
let obj = Object.create(Parent.prototype);
// 2.将obj和调用参数传给构造器执行
Parent.call(obj, ...rest);
// 3.返回构建完成对象
return obj;
}
let child = newI(Hero, '盖伦', '战士');
child.fire(); // 打印:盖伦发起攻击
console.log(child) // { name: "盖伦", job: "战士"}