实现思路
- 创建一个空的简单Javascript对象 (即{});
- 链接该对象(即设置该对象的构造函数)到另一个对象;
- 将步骤1新创建的对象作为this的上下文;
- 如果该函数没有返回对象,则返回this;
/**
* @bug 这里假设new出来实例的都是object,不是array对象
* @description 传入构造函数,以及构造函数参数,模拟构造函数返回一个新建实例
* @param {function} constructor 需要传入的构造函数
* @param {any} params 跟在constructor参数后面的所有参数,用来模拟传入constructor的参数
* @returns 返回一个新的对象
*/
function newFn(constructor){
var obj={}
obj.__proto__=constructor.prototype
var params=Array.prototype.splice.call(arguments,1);
constructor.apply(obj,params);
return obj
}
function Person(name,age){
this.name=name;
this.age=age
}
let Cat={
name:"",
age:""
}
let person=newFn(Person,"Florenza",20)
console.log(person)
console.log(person instanceof Person)
// console.log(cat)