一、new在执行的时候会做四件事情
- 创建一个全新的空对象
- 这个对象内部的 [[prototype]] 属性会被赋值为该构造函数的prototype属性(为新对象添加属性和方法)
- this会指向这个新对象(完成this 绑定)
- 执行构造函数,如果构造函数一个object类型的对象,将返回这个object类型的对象,若返回的是string,number,boolean等等,则返回之前创建的那个新对象,相当于返回this
二、代码实现
function objectFactory() {
let o = new Object();
let funcConstruct = [].shift.call(arguments);
Object.setPrototypeOf(o, funcConstruct.prototype);
let resObj = funcConstruct.apply(o, arguments);
return typeof resObj === "object" ? resObj : o;
}
function Student(name) {
this.name = name;
}
let s1 = objectFactory(Student, "小明");
console.log(s1);