new操作符具体做了什么
1、创建一个空对象,并且this变量引用该对象,同时继承了该函数的原型(实例对象通过__proto__
属性指向原型对象;obj.__proto__ = Base.prototype;
)
2、属性和方法被加入到 this 引用的对象中。
function Animal(name) {
this.name = name;
}
Animal.prototype.run = function() {
console.log(this.name + 'can run...');
}
var cat = new Animal('cat');
//模拟过程
new Animal('cat')=function(){
let obj={}; //创建一个空对象
obj.__proto__=Animal.prototype;
//把该对象的原型指向构造函数的原型对象,就建立起原型了:obj->Animal.prototype->Object.prototype->null
return Animal.call(obj,'cat');// 绑定this到实例化的对象上
}