步骤
1、创建了一个空的 JS 对象(即{})
2、将空对象的原型指向构造函数的原型
3、将空对象作为构造函数的上下文(改变this指向)
4、对构造函数有返回值的判断,如果该函数没有返回对象,则返回 this
function newOperator(ctor, ...args) {
if (typeof ctor !== 'function') {
throw 'newOperator函数的第一个参数必须是一个函数';
};
//1、创建一个空的对象
let obj = {}; // let obj = Object.create({});
//2、将空对象的原型prototype指向构造函数的原型
Object.setPrototypeOf(obj, ctor.prototype); // obj.__proto__ = ctor.prototype
//3、改变构造函数的上下文(this),并将剩余的参数传入
let result = ctor.apply(obj, args);
//4、在构造函数有返回值的情况进行判断
return result instanceof Object ? result : obj;
}
function student(name, age) {
this.name = name;
this.age = age
}
let zs = newOperator(student, '张三', 20);
console.log(zs);
箭头函数,为什么不能通过new生成实例
- 箭头函数本身没有this指向,所以 new 无法执行操作
网友评论