36 | 编程范式:基于原型的编程范式
陈皓
该思维导图由 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
《左耳听风》,新⼈⾸单¥98
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(23)
- 最新
- 精选
- 云学c++的原型模式就是一个clone虚方法,这篇文章看得是很懵逼,完全不了解Javascript2018-02-0211
- yun皓叔,是否可以分享下如何写出高质量的代码的经验?排查问题的方法经验?2018-02-1936
- edisonhuang基于原型的编程可以理解为是基于实例的编程,这种玩法就是一种委托的方式。在使用委托的基于原型的语言中,运行时语言可以“仅仅通过序列的指针找到匹配”这样的方式来定位属性或者寻找正确的数据。所有这些创建行为共享的行为需要的是委托指针。js使用基于原型的编程方法2019-06-254
- fsj看了这篇文章,然后又去翻了《JavaScript高级程序设计》,终于把原型继承搞明白了。之前学习Objective-C,觉得这语法挺奇葩的,但是面向对象思想和Java等都是互通的,然后又学习了JS,算是更奇葩了,没有类,玩的是原型继承,也是服,为什么JS不搞成类继承,非要搞一个原型继承呢?2018-04-0834
- 强老师,有时间能写写go吗2018-02-024
- 高科曾经以为自己懂JS,结果发现还真是以为2020-04-273
- 蜉蝣看过之前完全不懂,看完之后懵懵懂懂。不晓得什么时候才能搞懂。2019-08-192
- 杨洪林引用于JavaScript, The Core的图例有些问题,Function.prototype的__proto__应该是指向Object.prototype, 似乎Object.prototype应该是所有非prime类型对象的根2019-02-212
- bqzzz最后一个图是错了还是JavaScript更新了机制? 现在原文链接中Function.prototype.__proto__ === Object.prototype,而专栏中的Function.prototype.__proto__指向自身?2022-03-181
- 刘匿名js 的面向对象方式选择了灵活性,一定程度上失去了安全性和可预测性。 以前用过js,灵活简单易上手,但是同时项目复杂时就会很难排查问题,后来兴起了一系列前端项目的构建工具,和js的这些特点也不无关系。 每门语言都有自己的设计初衷和适用场景,现在常见的开发语言,设计思路上都有很多精华值得学习。 皓哥这篇文章把js面向对象的精华深入浅出的总结了下,赞!2020-12-101
收起评论