• 技术文章 >web前端 >前端问答

    es6中什么是原型链

    青灯夜游青灯夜游2022-11-15 19:28:26原创143

    原型链,简单理解就是原型组成的链。当访问一个对象的某个属性时,会先在这个对象本身属性上查找,如果没有找到,则会去它的__proto__隐式原型上查找,即它的构造函数的prototype,如果还没有找到就会再在构造函数的prototype的__proto__中查找,这样一层一层向上查找就会形成一个链式结构,被称为原型链。

    大前端零基础入门到就业:进入学习

    本教程操作环境:windows7系统、javascript1.8.5版、Dell G3电脑。

    什么是原型?

    在JS中,每个函数在被创建的时候就会有一个 prototype属性,这个属性是一个指针,指向一个对象,而这个对象就是这个函数的原型对象(也就是原型),它是用来共享所有实例的属性和方法的地方,所以原型其实就是函数的伴生体(与生俱来的)

    var a = [1, 2, 3, 4, 5];
    a.__proto__ === Array.prototype; // true

    什么是原型链?

    原型链,简单理解就是原型组成的链。当访问一个对象的某个属性时,会先在这个对象本身属性上查找,如果没有找到,则会去它的__proto__隐式原型上查找,即它的构造函数的prototype,如果还没有找到就会再在构造函数的prototype的__proto__中查找,这样一层一层向上查找就会形成一个链式结构,我们称为原型链

    创建一个构造函数:

    function Person (name) {
        this.name = name
    }
    var cheng = new Person('Cheng');
    var lin = new Person('Lin');

    打印cheng和lin,可以看到两个对象中都分别存在一个__proto__属性
    在这里插入图片描述
    在这里插入图片描述
    然后发现

    console.log(cheng.__proto__ === lin.__proto__); // true

    那么实例对象的这个__proto__属性到底是什么玩意?

    console.log(cheng.__proto__ === Person.prototype); // true
    console.log(lin.__proto__ === Person.prototype); // true

    小结:实例对象有一个不可枚举的属性 proto,这个属性是一个指针,指向了其构造函数的prototype也就是原型对象,实例可以通过 proto 访问到构造函数的原型上的方法

    简单来说,实例对象的 __proto__ 指向构造函数的 prototype

    2.png

    那么,这个构造函数的原型是什么呢?

    打印Person.prototype,可以看到也存在一个__proto__属性
    在这里插入图片描述

    console.log(Person.prototype.__proto__ === Object.prototype)

    小结:函数的原型本质就是一个普通对象,所以他是来自Object的实例,因此,原型对象的 proto 属性指向Object.prototype。

    3.png

    再往下找Object.prototype的__proto__是指向哪里呢?

    最后发现是指向null

    小结:Javascript中任意数据都能沿着自己的原型链最终找到Object.prototype

    总结:

    实例对象的 __proto__ 指向构造函数的 prototype,构造函数的__proto__ 指向Object的 prototype,Object的__proto__ 最终指向null

    【推荐学习:javascript高级教程

    以上就是es6中什么是原型链的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

    前端(VUE)零基础到就业课程:点击学习

    清晰的学习路线+老师随时辅导答疑

    自己动手写 PHP MVC 框架:点击学习

    快速了解MVC架构、了解框架底层运行原理

    专题推荐:ES6 原型链 javascript
    上一篇:javascript中小于等于怎么表示 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • ❤️‍🔥共22门课程,总价3725元,会员免费学• ❤️‍🔥接口自动化测试不想写代码?• es6怎么找出2个数组中不同项• es6中有没有&符号• es6 map有序吗• promise是es6的吗• es6新增循环有哪些
    1/1

    PHP中文网