MAYDAY1993 / mayday1993.github.io

只记录技术问题
https://mayday1993.github.io/
8 stars 1 forks source link

实例化一个对象的过程中发生了什么 #12

Open MAYDAY1993 opened 7 years ago

MAYDAY1993 commented 7 years ago

:question: 分这三部分:

proto

对象具有属性proto, 指向构造函数的原型对象 这样就可以继承原型对象上属性和方法了 这里把cat的原型指向Animal:

image

原型链:

image

引用的图 没事儿多看看:

:pill: 注意:

不要用proto来改变原型 影响性能

实例化过程


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到实例化的对象上
}

所以new一个对象 构成了原型链 可以继承原型上的属性和方法 就通了

参考资料

言必有疏 欢迎指教

leirt97 commented 6 years ago

这个实例化过程写的清晰明了