热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

深入理解JavaScript中的原型和原型链机制

在JavaScript中,原型和原型链是核心概念。通过定义构造函数`functionFoo(){}`,可以创建实例对象`letf1=newFoo()`。继承机制主要依赖于每个函数都具有的`prototype`属性,除了内置的`Function`构造函数之外,这一特性使得对象间的属性和方法共享成为可能。原型链通过链接这些原型对象,实现了复杂而灵活的继承结构,为JavaScript的面向对象编程提供了坚实的基础。

《一次性搞懂js中的原型与原型链》

组织函数:function Foo ( ) { };
实例对象:let f1=new Foo;

  1. 谈到继续时,Javascript 只要一种构造:对象
  2. 每一个函数都有 prototype 属性,除了 Function.prototype.bind(),该属性指向原型。
prototype

每一个Javascript对象(null除外)在建立的时刻就会与之关联另一个对象,这个对象就是我们所说的原型,每一个对象都邑从原型”继续”属性。

函数的 prototype 属性指向了一个对象,这个对象恰是挪用该组织函数而建立的实例的原型,也就是这个例子中的 f1 的原型。prototype带有__proto__和constructor

proto

每一个Javascript对象(除了 null )都具有的一个属性,叫
__proto__,这个属性会指向了
建立该对象的组织函数的原型。

console.log(f1._proto_ === Foo.prototype) // trueconstructor

每一个原型都有一个 constructor 属性指向关联的组织函数

因为实例对象能够继续原型对象的属性,所以实例对象也具有constructor属性,一样指向原型对象对应的组织函数。

console.log(Foo.prototype.cOnstructor=== Foo);//true
console.log(f1.cOnstructor=== Foo);//true
console.log(f1.hasOwnProperty('constructor'));//false
原型链

JS在建立对象(不论是一般对象照样函数对象)的时刻,都有一个叫做__proto__的内置属性,用于指向建立它的函数对象的原型对象prototype。以上面的例子为例:

console.log(fo.__proto__ === Foo.prototype) //true

一样Foo.prototype也有proto属性

console.log(Foo.prototype.__proto__ === Object.prototype) //true

Object.prototype对象也有proto属性,但它比较特别,为null

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

我们把这个有proto串起来的直到Object.prototype.proto为null的链叫做原型链。原型链的构成是真恰是靠proto 而非prototype

总结
  • 每一个组织函数都有一个原型对象

    Foo.prototype

  • 原型对象都包括一个指向组织函数的指针

    Foo.prototype.cOnstructor=== Foo

  • 实例都包括一个指向原型对象的内部指针

    fo.__proto__ === Foo.prototype

更多文章请前去语雀


推荐阅读
  • 本文介绍了如何利用摄像头捕捉图像,并将捕获的图像数据保存为文件。通过详细的代码示例,展示了摄像头调用的具体实现方法,适用于多种应用场景,如安全监控、图像处理等。 ... [详细]
  • 深入解析:开发笔记中的 this、call、bind 和 apply 方法详解
    深入解析:开发笔记中的 this、call、bind 和 apply 方法详解 ... [详细]
  • 本文旨在构建一个JavaScript函数,用于对用户输入的电子邮件地址和密码进行有效性验证。该函数将确保输入符合标准格式,并检查密码强度,以提升用户账户的安全性。通过集成正则表达式和条件判断语句,该方法能够有效防止常见的输入错误,同时提供即时反馈,改善用户体验。 ... [详细]
  • c#学Java–Java基本语法1.类比JAVA .NETJVM CLRJDK  FCL2.java命名约定类名称应以大写字母开头,并成为容易理解的名词或组合。如 ... [详细]
  • 如何高效地压缩JavaScript代码以提升网页性能
    本篇内容介绍了“javascript如何压缩”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处 ... [详细]
  • 本文深入探讨了Windows操作系统中线程同步机制的关键技术,重点分析了`WaitForSingleObject`和`Event`的使用方法及其应用场景。通过详细介绍`CreateEvent`函数的创建过程及其在判断线程退出和实现线程间同步中的重要作用,结合具体实例,展示了如何高效地利用这些工具来解决多线程编程中的常见问题。此外,文章还讨论了这些机制在实际开发中的最佳实践和注意事项,为开发者提供了宝贵的参考。 ... [详细]
  • Ajax技术主要应用于JavaScript中,对于ASP的要求相对较低,ASP仅需在后台处理和操作服务器端数据。具体实现过程可以分为以下几个步骤:1. 设计前端表单;2. 使用JavaScript编写Ajax请求,将表单数据发送到服务器;3. 服务器端通过ASP处理请求并返回验证结果;4. 前端根据返回的结果进行相应的用户反馈。这种技术不仅提升了用户体验,还提高了表单验证的效率和安全性。 ... [详细]
  • 本文深入探讨了 AdoDataSet RecordSet 的序列化与反序列化技术,详细解析了将 RecordSet 转换为 XML 格式的方法。通过使用 Variant 类型变量和 TStringStream 流对象,实现数据集的高效转换与存储。该方法不仅提高了数据传输的灵活性,还增强了数据处理的兼容性和可扩展性。 ... [详细]
  • 本文深入探讨了在React.js中为类组件实现自动绑定的方法与可能性。React.createClass会自动将所有方法绑定到实例,但在React的类组件中,这一功能并非内置。文章分析了如何通过特定技术手段或第三方库来实现类组件方法的自动绑定,以提升开发效率和代码可维护性。 ... [详细]
  • Webpack与Babel的配置详解及优化策略深入探讨了这两个工具在现代前端开发中的应用。Babel作为一款强大的JavaScript编译器,能够将最新版的JavaScript代码转换为广泛兼容的版本,从而突破浏览器对ES规范的支持限制,确保开发者可以无缝使用最新的语言特性。本文不仅介绍了如何高效配置Webpack与Babel,还提供了多种优化策略,以提升构建性能和代码质量。 ... [详细]
  • 本文详细探讨了快速排序算法的实现原理及其优化策略,通过具体代码示例 `function quickSort(arr, left, right)` 解析了数组在不同区间内的递归排序过程,旨在帮助读者深入理解快排的工作机制和性能优化方法。 ... [详细]
  • 技术分享:JavaScript博客园鼠标点击动态效果实现笔记
    技术分享:JavaScript博客园鼠标点击动态效果实现笔记 ... [详细]
  • 利用JavaScript高效完成网页表单填写与提交 ... [详细]
  • 第一行第一列第一行第二列第二行第一列第二行第二列第二行第一列第二行第二列第三行第一列第三行第二列跨行colspan跨列rowspan手机充值办公设备、手机、耗材各种卡的汇总铅笔毛笔 ... [详细]
  • 通过移除单一数字优化数据集 ... [详细]
author-avatar
patrick0129_645
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有