原型prototype和proto每次都觉得自己掌握地不透 知识点太多太杂 现在开启我的梳理之路 希望能给大家一点帮助

原型是函数通过.protytype可以访问到的属性,是属于函数的属性。函数都有自己的原型,函数的原型可以通过prototype改变默认的原型

例如:

let myobj={
        name:'testobj'
    }
    Car.prototype=myobj
    console.log(Car.prototype)
    

我们可以通过设置Car.prototype=myobj改变Car默认的原型

下面简单聊聊原型上的属性重写的问题

对象new之前重写 new之前重写原型原型上的属性变了所以new出来的对象也会改变
new之前改写原型属性

function Car(){
        name='benz'
    }
    Car.prototype={//new之前重写原型
        name:'posche'
    }
    let mycar=new Car()
    console.log(mycar.name)//posche

new之后改写原型属性

function Car(){
        name='benz'
    }
    let mycar=new Car()

    Car.prototype={//new 之后重写原型
        name:'farari'
    }

    console.log(mycar.name) //benz  
    

直接给prototype上的属性赋值

  function Car(){
        name='benz'
    }
    Car.prototype.name="posche"
    let mycar=new Car()
  
    console.log(mycar.name)//posche

    Car.prototype.name="farari"
    console.log(mycar.name)//farari
    

二、原型链

    function Grandfather(){//祖父构造函数
        this.salary='1000万'
    }
    let grandfather=new Grandfather()//祖父对象实例

    function Father(){
        this.salary='100万'
    }
    Father.prototype=grandfather//把祖父对象设置成父构造函数的原型 下面的同理
    let father=new Father()    

    function Son(){
        this.salary='10万'
    }
    Son.prototype=father
    let son=new Son()

    function Grandson(){
        this.salary='1万'
    }
    Grandson.prototype=son
    let grandson=new Grandson()
    console.log(grandfather)

上面是一系列构造函数,祖父构造函数,通过祖父构造函数 Grandfather new一个祖父对象grandfather,再构造一个父函数father,把祖父函数new的对象grandfather设置成父函数father的原型 以此类推 大家可以看下边的打印结果 这些对象都通过一个叫_proto_的属性依次向上继承父辈的属性形成了链式继承 这种链条称之为原型链

换句话说原型链就是用_proto_串起来的链式继承关系

WechatIMG566.png

如下所示 Grandfather的_proto_是一个对象Object
WeChat18114719654e5d72d71665ada7ff9d05.png

Object点开以后是对象Object的一些属性和方法 我们可以总结一个结论 原型的顶端是对象的原型 Object._proto_
WeChat8186babf967ebadbab47b130609c4d04.pngWechatIMG566.png


大白白
10 声望15 粉丝

大白白,(●—●)跟bug死磕到底的码农~~~喜欢美食旅游,跟你一起畅谈美食狂虐bug