`

原型语言

    博客分类:
  • 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对象。 

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

相关推荐

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

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

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

    劈 一种受 Haskell、Idris 和 Rust 启发的快速原型语言。 文档 请参考。

    弱类型动态语言Io.zip

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

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

    过去MathWork公司的Matlab这类解释语言曾被用来作为快速建立原型的工具来完成高级仿真,并用于算法开发。这类工具提供的环境可用于对候选方案进行综合、分析以及可视化。许多这样的软件系统都支持定点分析,并可能与...

    强大的原型和原型链

    JavaScript 不包含传统的类继承模型,而是使用 prototypal 原型模型。...由于 JavaScript 是唯一一个被广泛使用的基于原型继承的语言,所以理解两种继承模式的差异是需要一定时间的,今天我们就来了解一下原型和原型链

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

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

    网上商城页面原型HTML

    网上商城的页面原型 适合多种语言使用 源代码+rar格式

    教师管理系统原型

    教师信息化管理平台中的每个业务模块中所涉及的业务逻辑都可以进行单独管理,并且提供多种语言的API接口供外部程序进行调用,同时也可以与第三方的管理平台进行对接。 教师信息化管理平台可以集成现有的软件系统,...

    论文研究-基于潜在语义分析和改进的原型算法的跨语言文本分类 .pdf

    基于潜在语义分析和改进的原型算法的跨语言文本分类,赵江,兰曼,随着经济全球化发展,越来越多的组织机构急需自动化归类多语言的文档,然而却受限于缺少已知类别的外文文档。跨语言的文本分类技

    数据库原型系统.zip

    本课程设计为一个数据库管理系统的原型系统,要求如下: (1)服务器与客户端。原型系统为C/S结构,...设计数据查询、数据操作的查询语言 (3)词法分析与语法解析模块。自己实现数据指令集的词法解析与语法解析。

    国际多语言出海商城返佣产品自动匹配订单源码

    此网站是很多巴西客户定制的原型,已投放运营符合当地本地化 多语言商城返利返佣投资理财派单自带余额宝, 采取全新支付端口,后台语音提醒,客服中心改造豪华页面,赠送客服系统 后台釆取全新框架, 余额宝分为定数...

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

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

    FPGA实现边缘提取算法,matlab原型和FPGA实现verilog语言.zip

    FPGA实现边缘提取算法,matlab原型和FPGA实现verilog语言

    专业的快速原型设计工具

    Axure的可视化工作环境可以让你轻松快捷的以鼠标的方式创建带有注释的线框图。不用进行编程,就可以在线框图上定义简单...在线框图的基础上,可以自动生成HTML(标准通用标记语言下的一个应用)原型和Word格式的规格。

    原型模式(ProtoType)C#应用案例

    一个原型设计模式的应用案例,C#语言编写,有助于设计模式的理解和学以致用。

    GO语言原型-Go Recipes

    Solve your Go problems using a problem-solution approach. Each recipe is a self-contained answer to a practical programming problem in Go. Go Recipes contains recipes that deal with the fundamentals o...

    数据库管理系统原型开发(C/C++)

    用C++语言开发的数据库管理系统原型。下载解压即可直接使用,使用环境windows,需要自己手动修改一下main.cpp中的路径。

    Axure RP是一个专业的快速原型设计工具。

    Axure RP是一个专业的快速原型设计工具。axure7.0中文语言汉化包

    cpp-Arduino开源电子原型平台

    基于简单I / O板的开源物理计算平台和实现处理/布线语言的开发环境。 Arduino可用于开发独立的交互式对象,也可以连接到计算机上的软件(例如Flash,Processing和MaxMSP)。

Global site tag (gtag.js) - Google Analytics