1.手写 new 方法
function myNew(){
// 创建一个空对象
const obj = {}
// 将参数中第一个(第一个参数就是构造函数)拿出来定义
const Constructor = Array.prototype.shift.call(arguments)
// 将构造函数的prototype属性赋值给实例对象的__proto__
obj.__proto__ = Constructor.prototype
// 判断构造函数是否存在返回值
const res = Constructor.apply(obj, arguments)
return typeof res === 'object'? res : obj
}
// 测试代码
function Cat(name){
this.name = name
}
Cat.prototype.sayName = function(){cat
console.log(this.name)
}
var cat = myNew(Cat, 'Tom')
cat.sayName() // Tom
console.log(cat.__proto__ === Cat.prototype) // true