左耳听风
陈皓
网名“左耳朵耗子”,资深技术专家
180928 人已学习
新⼈⾸单¥98
登录后,你可以任选6讲全文学习
课程目录
已完结/共 119 讲
左耳听风
15
15
1.0x
00:00/00:00
登录|注册

36 | 编程范式:基于原型的编程范式

灵活性和不确定性
数据和方法的修改
委托的方式
修改原型的影响
示例:使用原型创建对象
Object.create()函数
示例:对象之间的原型链
__proto__prototype的区别
基于原型的面向对象编程
JavaScript原型编程的面向对象
JavaScript的原型概念
编程范式游记系列文章目录
小结
JavaScript原型编程的面向对象

该思维导图由 AI 生成,仅供参考

你好,我是陈皓,网名左耳朵耗子。
基于原型(Prototype)的编程其实也是面向对象编程的一种方式。没有 class 化的,直接使用对象。又叫,基于实例的编程。其主流的语言就是 JavaScript,与传统的面向对象编程的比较如下:
在基于类的编程当中,对象总共有两种类型。类定义了对象的基本布局和函数特性,而接口是“可以使用的”对象,它基于特定类的样式。在此模型中,类表现为行为和结构的集合,对所有接口来说这些类的行为和结构都是相同的。因而,区分规则首先是基于行为和结构,而后才是状态。
原型编程的主张者经常争论说,基于类的语言提倡使用一个关注分类和类之间关系的开发模型。与此相对,原型编程看起来提倡程序员关注一系列对象实例的行为,而之后才关心如何将这些对象划分到最近的使用方式相似的原型对象,而不是分成类。
因为如此,很多基于原型的系统提倡运行时进行原型的修改,而只有极少数基于类的面向对象系统(比如第一个动态面向对象的系统 Smalltalk)允许类在程序运行时被修改。
在基于类的语言中,一个新的实例通过类构造器和构造器可选的参数来构造,结果实例由类选定的行为和布局创建模型。
在基于原型的系统中构造对象有两种方法,通过复制已有的对象或者通过扩展空对象创建。很多基于原型的系统提倡运行时进行原型的修改,而基于类的面向对象系统只有动态语言允许类在运行时被修改(Common Lisp、Dylan、Objective-C、Perl、Python、Ruby 和 Smalltalk)。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

JavaScript的原型编程范式是一种独特的面向对象编程方式,与传统的基于类的面向对象编程有着明显的区别。在基于原型的编程中,对象直接使用原型,而不需要类的定义,这种委托的方式为运行时语言提供了灵活性,但也带来了执行的不确定性和安全性问题。JavaScript作为主流的基于原型的语言,通过`__proto__`属性和`prototype`属性实现对象之间的原型链关系,从而实现属性和方法的继承。虽然ECMAScript标准的第六版中提供了"class"语法糖来支持基于类的构造,但基于原型的编程仍然是JavaScript中重要的编程范式。本文介绍了基于原型的编程范式及其在JavaScript中的应用,强调了其灵活性和不确定性,同时提供了对基于原型的语言的全貌的了解。读者可以通过本文快速了解基于原型的编程范式及其在JavaScript中的特点和应用。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《左耳听风》
新⼈⾸单¥98
立即购买
登录 后留言

全部留言(23)

  • 最新
  • 精选
  • 云学
    c++的原型模式就是一个clone虚方法,这篇文章看得是很懵逼,完全不了解Javascript
    2018-02-02
    11
  • yun
    皓叔,是否可以分享下如何写出高质量的代码的经验?排查问题的方法经验?
    2018-02-19
    3
    6
  • edisonhuang
    基于原型的编程可以理解为是基于实例的编程,这种玩法就是一种委托的方式。在使用委托的基于原型的语言中,运行时语言可以“仅仅通过序列的指针找到匹配”这样的方式来定位属性或者寻找正确的数据。所有这些创建行为共享的行为需要的是委托指针。js使用基于原型的编程方法
    2019-06-25
    4
  • fsj
    看了这篇文章,然后又去翻了《JavaScript高级程序设计》,终于把原型继承搞明白了。之前学习Objective-C,觉得这语法挺奇葩的,但是面向对象思想和Java等都是互通的,然后又学习了JS,算是更奇葩了,没有类,玩的是原型继承,也是服,为什么JS不搞成类继承,非要搞一个原型继承呢?
    2018-04-08
    3
    4
  • 老师,有时间能写写go吗
    2018-02-02
    4
  • 高科
    曾经以为自己懂JS,结果发现还真是以为
    2020-04-27
    3
  • 蜉蝣
    看过之前完全不懂,看完之后懵懵懂懂。不晓得什么时候才能搞懂。
    2019-08-19
    2
  • 杨洪林
    引用于JavaScript, The Core的图例有些问题,Function.prototype的__proto__应该是指向Object.prototype, 似乎Object.prototype应该是所有非prime类型对象的根
    2019-02-21
    2
  • bqzzz
    最后一个图是错了还是JavaScript更新了机制? 现在原文链接中Function.prototype.__proto__ === Object.prototype,而专栏中的Function.prototype.__proto__指向自身?
    2022-03-18
    1
  • 刘匿名
    js 的面向对象方式选择了灵活性,一定程度上失去了安全性和可预测性。 以前用过js,灵活简单易上手,但是同时项目复杂时就会很难排查问题,后来兴起了一系列前端项目的构建工具,和js的这些特点也不无关系。 每门语言都有自己的设计初衷和适用场景,现在常见的开发语言,设计思路上都有很多精华值得学习。 皓哥这篇文章把js面向对象的精华深入浅出的总结了下,赞!
    2020-12-10
    1
收起评论
显示
设置
留言
23
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部