new
// 每一个类都会有自己的一个原型 prototype // 每一个new 出来的实例 ,都会有一个__proto__,然后通过__proto__就可以找到我们的原型prototype, // 原型prototype上面除了有我们自己写的公共方法say,还会有一个constructor构造函数,而这个constructor函数指向的是我们的Animal类
function mockNew() { // 第一个参数是一个类,第二个参数是 实例上的属性
// Constructor => animal
let Constructor = [].shift.call(arguments); // 删除的是我们arguments上的第一项
// 剩余的arguments 就是其他的参数
let obj = {};
obj.__proto__ = Constructor.prototype; // 继承了原型上的方法
let r = Constructor.apply(obj, arguments);
return r instanceof Object ? r : obj;
}
let dog = mockNew(Dog, 'Dog--动物1');
console.log(dog)
console.log(dog.say());