如果构造函数返回了对象,则new 函数则返回该对象, 如果返回的不是对象,例如字符串等等,则返回创建的实例对象。
function create(Con,...params) {
// 1、创建一个对象 原型指向构造函数的原型 可以访问原型上的属性
let obj = Object.create(Con.prototype);
// 2、将构造函数的this指向obj 并执行构造函数
let res = Con.apply(obj,params);
// 3、判断构造函数是否返回对象 是则返回该对象 不是则返回obj
return res instanceof Object ? res : obj;
};
// 测试用例
function Car(color) {
this.color = color;
}
Car.prototype.start = function() {
console.log(this.color + " car start");
};
var car = create(Car, "black");
car.color;
// black
car.start();
// black car start