千家信息网

如何理解JavaScript中的原型与原型链

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,本篇文章给大家分享的是有关如何理解JavaScript中的原型与原型链,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。原型和原型链关系贯穿
千家信息网最后更新 2026年11月03日如何理解JavaScript中的原型与原型链

本篇文章给大家分享的是有关如何理解JavaScript中的原型与原型链,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

原型和原型链关系贯穿JavaScript中的对象,而JavaScript中万物皆对象,所以原型和原型链是比较重要的概念,今天就带大家一起来看一看JavaScript中的原型与原型链。

一、了解概念(知道有这两个名词即可)

  1. 原型(prototype)

  2. 原型链(__proto__)

二、了解从属关系

prototype  => 函数的一个属性         : 同时也是一个 对象{} (称之为原型对象亦可)__proto__ => 对象Object的一个属性   : 同时也是一个 对象{}   (__proto__也就是[[Prototype]])

注:对象的__proto__保存着该对象的构造函数的prototype

a.声明一个构造函数

    function Test() { }      //prototype 是函数的一个属性    console.dir(Test);    console.log(Test.prototype);    // Test.prototype也是一个对象    console.log(typeof Test.prototype);

b.声明一个对象

    const test = new Test();        console.log(test);    //验证test为一个对象    console.log(typeof test);    //__proto__是对象的一个属性    console.log(test.__proto__);    console.log(Test.prototype);    //对象的__proto__属性存储着Test.prototype    console.log(test.__proto__ === Test.prototype);    // test.__proto__也是一个对象    console.log(typeof test.__proto__);
function Test() {}console.log(Test.prototype); //验证函数是否有prototype属性let test = new Test();console.dir(test.__proto__); //验证对象是否有__proto__属性console.log(test.__proto__ === Test.prototype);//验证对象的__ptoto__是否保存着该对象的构造函数的prototypeconsole.log(Test.prototype.__proto__ === Object.prototype);//Test.prototype(是一个对象)的__proto__属性是否是对象的原型属性console.log(Object.prototype.__proto__);//原型链的顶层没有__proto__属性 null

三、深入认识原型链、原型和原型继承

    function Test(){}    let test =new Test();    test.a= 10;    //test.__proto__ === test.constructor.prototype    test.__proto__.b1=11;//对象的__proto__属性存储着对象构造函数的prototype属性    Test.prototype.b2=11;       test.__proto__.__proto__.c1=12;    Object.prototype.c2=12;    console.log(test);    console.log(Test.prototype);    console.log(Object.prototype.__proto__);       /*逐层解析    * test{    *        a = 10    *        __proto__:Test.prototype{    *                 b = 11    *                 __proto__:Object.prototype{    *                           c = 12    *                           X__prototype__:null    *                 }             *        }    *     }    *    * */

四、总结

  • 不建议直接用 __proto__ 访问。

  • 可以简单概括为以prototype为原型节点, __proto__为原型链条。

  • 每个实例对象(object)都有一个私有属性(称之为 __proto__ )指向它的构造函数的原型对象(prototype)。该原型对象也有一个自己的原型对象(__proto__),层层向上直到一个对象的原型对象为 null。根据定义,null 没有原型,并作为这个原型链中的最后一个环节。

  • someObject.[[Prototype]] 符号是用于指向 someObject 的原型,someObject.[[Prototype]] === __proto__(JavaScript的非标准但许多浏览器实现的属性)。

  • Object.prototype 属性表示 Object 的原型对象。

  • 被构造函数创建的实例对象的 [[Prototype]] 指向 func的 prototype 属性。

以上就是如何理解JavaScript中的原型与原型链,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。

对象 原型 属性 函数 验证 指向 同时 实例 更多 概念 知识 篇文章 存储 实用 重要 万物 两个 也就是 名词 就是 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广东万易互联网科技有限公司惠州分公司 科技金融是不是互联网金融 科技赋能下的互联网金融 中国互联网科技股 科技信息互联网 互联网高科技企业 亿人帮互联网科技 科技赋能互联网健康 世界互联网科技公司市值排名 荆州市昕露互联网络科技有限公司 赶超互联网科技 微信多开 如何创新互联网科技 区块链结合互联网科技 互联网时代的科技公司 黑科技 体验场景 互联网大会 皮皮虾互联网科技有限公司 扫呗互联网科技有限公司 互联网科技接地气 互联网大会出现的黑科技 六子台科技互联网展会 北京路客互联网科技有限公司 九亚互联网科技 科技赋能互联网健康 互联网大会黑科技排名 宁夏众和广鑫互联网科技有限公司 城市宝互联网科技有限公司 上海互联网科技公司ppt 风投北京互联网科技 卡尔迅互联网科技有限公司 陕西云淼互联网科技公司
0