`

原型语言

    博客分类:
  • JS
 
阅读更多

一、什么是原型语言

悟空问观音:什么是原型语言 
观音:一切都是对象,对象继承对象,这就是原型语言。
悟空:好,明白
唐僧: 详细一点来说,
1  只有对象,没有类;对象继承对象,而不是类继承类。

2  “原型对象”是核心概念。原型对象是新对象的模板,它将自身的属性共享给新对象。一个对象不但可以享有自己创建时和运行时定义的属性,而且可以享有原型对象的属性。

3  每一个对象都有自己的原型对象,所有对象构成一个树状的层级系统。root节点的顶层对象是一个语言原生的对象,只有它没有原型对象,其他所有对象都直接或间接继承它的属性。
...
悟空:!@#¥%……


二、谁来 创建 对象
A: 一切都是对象,那依靠谁来生成对象呢?
B:人类的世界都是人,谁来生产人
A: 人来生人啊!这不是2B的问题嘛!
B: 那你刚才问啥,2b?
上帝之音: 原型的世界,对象创建对象。

原型语言创建有两个步骤
1. 使用"原型对象"作为"模板"生成新对象
这个步骤是必要的,这是每个对象出生的唯一方式。以原型为模板创建对象,这也是"原型"(prototype)的原意。
2. 初始化内部属性
这一步骤不是必要的。通俗点说,就是,对"复制品"不满意,我们可以"再加工",使之获得不同于"模板"的"个性"。

这两个步骤很自然,也很好理解,比使用类构造对象从概念上简单得多了,而且更符合自然。对于习惯了java基于类的面向对象的语言的程序员, 这种"新颖"的生成对象的方式一定会让他们感到好奇。

三、内存对原型说,我爱死你了
内存说,自从有了原型,腰不酸了,腿不疼了,跳楼也有劲了

使用原型,能复用代码,节省内存空间 

举个例子,存在旧对象oldObject,它有一个属性name,值是’Andy’, 和一个名为getName()的方法,如果以该对象为原型创建一个新对象,
Js代码  收藏代码
  1. newObject = create(oldObject);  
 
那么新对象newObject同样具有属性name,值也是’Andy’,也有一个方法getName()。值得注意的是,newObject并不是在内存中克隆了oldObject,它只是引用了oldObject的属性,  导致实际的效果好像"复制"了newObject一样。

 newObject = create(oldObject);创建的对象newObject只有一个属性,这个属性的值是原型对象的地址(或者引用),如下图所示。


四、原型链
本屌在街上见到一个战斗只有5的渣,准备欺负他找点乐子,没想到,他说:我爸是李刚,我爷是胡哥,我曾爷爷也是...

原型世界的对象也一样,对象不是一个人在战斗,他在原型链上的关系能给予他强大的力量。

当对象访问属性的时候,如果在内部找不到,那么会在原型对象中查找到属性;如果原型对象中仍然找不到属性,原型对象会查找自身的原型对象,如此循环下去,直至找到属性或者到达顶级对象。对象查找属性的过程所经过的对象构成一条链条,称之为原型链。newObject,oldObject和topObject就构成一条原型链。

下面列出newObject的3种的查找属性情况

newObject查找name,
1 内部找不到,到原型对象中查找
2 oldObject中查找到了name,成功返回;

newObject查找toString
1 内部找不到,到原型对象中查找
2 oldObject中查找不到toString,到原型对象中查找
3 topObject中查找到了toString,成功返回;

newObject查找valueOf
1 内部找不到,到原型对象中查找
2 oldObject中查找不到valueOf,到原型对象中查找
3 topObject中还是找不到,而且topObject是顶层对象,所以返回错误或者空值。

对象会通过原型链动态地查找属性,对象的所拥有的属性是动态的。
如果原型链上的一个对象发生的改变,那么这个改变也会马上会反应到在原型链中处于该对象下方的所有对象,这是一个非常有用的特性。

五、术语: 继承
对象A问上帝:继承是什么?
上帝问A      :你知道你为什么那么帅吗?
 A              :不知道
上帝           :你看看正在看博客的那位超级帅哥,他是你爹,你理解什么是继承了吧

在java中 通过语句class Cat extends Animal定义Cat类继承Animal类,Cat类产生的实例对象便拥有了Animal类中定义的属性。类似地,在基于原型的语言中, 通过cat = create(animal)创建以animal对象为模板的cat对象,cat对象便拥有了animal对象中的属性,因此可以说cat对象继承了 anmial对象。 

六、小结
原型的本质就是对象引用原型对象的属性,实现代码复用。
分享到:
评论

相关推荐

    chop:一种受 Haskell、Idris 和 Rust 启发的快速原型语言

    "Chop: 一种受Haskell、Idris和Rust启发的快速原型语言"是一个创新性的编程语言设计,旨在提供高效的原型开发环境。这个项目的名字“Chop”可能源自其核心理念,即“切片”或“简化”复杂的编程概念,以实现快速的...

    论文研究 - 原型音节-* kam-(及其语音变体-* kham-,-* cham-)在现代地名中广泛传播的原因(多学科方法)

    本文基于关于现代地名中保存的原型语言的音节假说(Mironova,2008),提出了一种原型语言研究领域的新方法。 音节-* kam-自古以来就存在于同义词和同义词中,并且在其语音排列中显示出常见的古代含义的存在。 研究...

    单片机与DSP中的滤波器软件流水线原型语言

    在单片机与DSP应用中,滤波器软件流水线原型语言是一种重要的设计与开发工具。这个话题主要涉及了MathWorks公司的Matlab及其相关的Simulink等工具在滤波器设计中的作用,以及如何通过这些工具实现高效且精确的算法...

    飞机自动驾驶系统原型开发方法研究.pdf

    一种名为PSDL(Prototype System Description Language)的高级原型语言被广泛用于实时系统原型开发,它由美国Naval Postgraduate School开发。PSDL利用增强的图模型,即G-(V, E, T(v), C(v)),来描述子系统、通信...

    弱类型动态语言Io.zip

    io作为一门原型语言,其对象关系模型也十分清晰。使用protos就可以查看某一个对象(需要为带有type槽的对象)的原型列表。某一个对象在收到消息时会查找自己的是否含有相应的消息槽,如果有就直接响应,如果没有就在...

    Flash中ActionScript语言的使用分析 pdf

    它为变量的传输提供了点语法,并且演变成了原型语言,支持简单的面向对象编程(OOP)功能。在Flash MX(6.0)版本中,这些功能得到了进一步增强。 第二阶段是ActionScript 2.0,这个版本相对比较规范,可以看作是1.0...

    强大的原型和原型链

    JavaScript 的继承机制与传统面向对象语言(如 Java、C#)中的类继承不同,它采用了基于原型(Prototype-based)的继承模型。这种模型使得 JavaScript 在处理对象之间的继承关系时更加灵活且强大。尽管初学者可能对...

    论文研究 - 基于转喻和隐喻的英语“黑色”研究的认知方法

    通过《牛津高阶英汉双解词典》(第六版)中的“黑色”数据,在原型语言,概念隐喻理论,转喻理论等认知语言学理论的指导下,本文采用基本颜色术语“黑色”。以英语为例,分析认知语义结构并归纳其原因。 本文旨在...

    原型模式实践代码

    在Java、C#等面向对象的语言中,原型模式通过实现`Cloneable`接口或使用序列化机制来实现对象的复制。在这个"原型模式实践代码"中,我们可以预期看到如何在实际编程中应用这一模式。 在Java中,`Cloneable`接口是...

    很牛的原型软件

    对于原型软件来说,提供多种语言的界面可以帮助全球团队成员共享和评审原型,确保设计符合不同市场的需要。 最后,“DefaultSettings”可能是指软件的默认设置文件。在原型设计软件中,这些设置可能包括默认的颜色...

    智能知识库40原型

    在智能知识库40原型中,它可能利用了先进的自然语言处理(NLP)、机器学习(ML)和人工智能(AI)技术,使得系统能够理解和解析用户的查询,提供更为精准的搜索结果。 该原型的设计可能包含以下几个关键知识点: 1...

    网站后台管理系统原型

    1. CSS(Cascading Style Sheets):CSS是一种样式表语言,用于描述HTML或XML(包括如SVG、MathML等各种XML方言)文档的呈现。通过CSS,可以实现网页的布局控制、颜色设定、字体选择、背景图片等视觉效果,使网页...

    js原型链详解

    JavaScript作为一门基于原型的语言,其原型和原型链的概念是理解和掌握JS继承机制的关键。接下来将详细阐述这些概念。 #### 普通对象与函数对象 在JavaScript中,一切皆为对象,但对象可以分为两类:普通对象和...

    OMS界面原型HTML版

    HTML(HyperText Markup Language)是网页制作的基础语言,用于定义页面结构和内容。在这个项目中,HTML被用来构建OMS界面的基本框架,包括各种元素如按钮、表单、导航栏等,以及页面的布局和内容结构。HTML代码会与...

    物流管理系统原型(html)

    1. **HTML(HyperText Markup Language)**:HTML是网页开发的基础语言,用于定义网页的结构和内容。在物流管理系统的原型中,HTML被用来构建页面布局、添加文本、图像和其他交互元素,为用户提供直观的界面。例如,...

    Axure原型文件下载:微信阅读原型

    就我个人来说,对于工具的学习,无论是某一个软件,还是某一门程序语言,都是比较习惯先找个资料看一下基础的介绍,然后就开始做一个稍微复杂点的案例,在案例中快速学习,遇到不懂的再去查资料。这样不仅可以帮助...

    原型模式PPT文档

    6. **示例代码**:PPT可能还包含了Java或其他语言的示例代码,展示如何实现一个简单的原型模式。 7. **最佳实践**:在使用原型模式时,要注意处理对象的引用关系,确保正确地复制所有必要的数据。另外,如果对象的...

    网上商城页面原型HTML

    在这个项目中,我们拥有的是一个支持多种语言的网上商城页面原型,这意味着该设计考虑到了全球化的市场,能够适应不同地区的用户需求。 在网页设计领域,HTML(超文本标记语言)是构建网页内容的基础,它定义了网页...

Global site tag (gtag.js) - Google Analytics