欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

构造函数与实例对象和原型对象三者间的关系

程序员文章站 2022-07-01 19:56:52
...

**

构造函数与实例对象和原型对象三者间的关系

**
在我认知中,实例对象就是儿子,构造函数就是母亲,原型对象就是爸爸。每次生儿子,儿子就会把母亲身上的属性继承一份新的。

构造函数与实例对象和原型对象三者间的关系

例子:

    var obj = {name:'干爸爸',age: 66}

    //构造函数

    function   Mother(){
        this.name = 'zqc',
        this.age = 33
    }

    function MotherTwo(){
        this.name = '新妈妈'this.age = 22
    }

    //原型对象
    Mother.prototype.name = 'sxq';

    //实例对象
    var SonOne = new  Mother();

一. new 命令的原理

  1. 先创建一个空对象,作为将要返回的实例对象。

  2. 将这个对象指向构造函数的prototype。

  3. 将这个空对象赋值给函数内部的this关键字。

  4. 开始执行构造函数的内部代码。

SonOne.name

自己有的属性用自己的,自己没有的就找父亲要,父亲没有的就找祖父要。

打印 SonOn.name 如果自己身上有name属性就打印出来自己身上的name 就是 zqc。

如果自己身上没有就去找父亲要,那样的话就找到了 sxq 。

二. constructor属性

如果儿子(实例对象)想找母亲(构造函数),这时候就要去问父亲(原型对象) 。

SonOne.constructor 这个时候就会打印 构造函数(母亲)

儿子不能修改父亲的constructor值。就像你叫你爸换一个妈,你爸肯定不会换的。

Mother.prototype.constructor = MotherTwo;

你爸(原型对象)可以选择换个妈,然后爸爸就会给你说( MotherTwo)才是你妈。

三. proto 属性

儿子(实例对象)找父亲(原型对象)

SonOne.proto 这个时候就会打印 构造函数的prototype

儿子可以修改__proto__ , 就相当于你可以 你可以选择不认自己的爹,在给自己找一个干爹。 eg: SonOne.proto = obj ;

修改后,你在打印就会爸爸的年龄就会打印出来 66

完整图关系图构造函数与实例对象和原型对象三者间的关系