原型链(最详细)

在这里插入图片描述

都是代码人,用代码交流吧,上代码:

初级原型链:

<script>
        //构造函数
        function Person() {

        };
        //实例(每个实例对象都有一个__proto__属性指向原型对象)
        var zhang = new Person();
        //原型对象(每个函数都有一个prototype属性指向原型对象)
        Person.prototype;
        // 原型对象又有一个constructor属性指向构造函数。

        // 验证: 
        console.log(Person.prototype.constructor === Person) //true
        console.log(zhang.__proto__ === Person.prototype) //true
    </script>

想法原型对象,其实也可以看作是一个实例对象,也有__proto__属性

    // 打印一下原型对象:
    console.log(Person.prototype)

在这里插入图片描述
完整代码:

  <script>
        //构造函数
        function Person() {

        };
        //实例(每个实例对象都有一个__proto__属性指向原型对象)
        var zhang = new Person();
        //原型对象(每个函数都有一个prototype属性指向原型对象)
        Person.prototype;
        // 原型对象又有一个constructor属性指向构造函数。

        // 验证: 
        console.log(Person.prototype.constructor === Person) //true
        console.log(zhang.__proto__ === Person.prototype)

        // 想法:原型对象,其实也可以看作是一个实例对象,也有__proto__属性

        // 打印一下原型对象:
        console.log(Person.prototype)

        //Person.prototype指向的原型对象
        console.log(Person.prototype.__proto__)
        //Person.prototype指向的原型对象的构造函数
        console.log(Person.prototype.__proto__.constructor)
        // 验证:
        console.log(Person.prototype.__proto__.constructor.prototype === Person.prototype.__proto__) //true

        //Person.prototype指向的原型对象的原型对象
        console.log(Person.prototype.__proto__.__proto__)  //null
    </script>

注意点:proto 并不是语言本身的特性,这是各大厂商具体实现时添加的私有属性,虽然目前很多现代浏览器的 JS 引擎中都提供了这个私有属性,但依旧不建议在生产中使用该属性,避免对环境产生依赖。生产环境中,我们可以使用 Object.getPrototypeOf 方法来获取实例对象的原型,然后再来为原型添加方法/属性。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南朝听月

你的打赏是我持续贡献的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值