`

笑学原型——Object-Oriented JavaScript(Part 1)

 
阅读更多


原型语言


一、什么是原型语言

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

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

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


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

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

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

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

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

举个例子,存在旧对象oldObject,它有一个属性name,值是’Andy’, 和一个名为getName()的方法,如果以该对象为原型创建一个新对象,
 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对象。 

六、小结
原型的本质就是对象引用原型对象的属性,实现代码复用。
5
2
分享到:
评论
8 楼 chenyu_limo 2013-03-21  
[color=green][/color]很好的文章呀
7 楼 mlxboy 2012-09-11  
诙谐,精辟!
6 楼 wwwcomy 2012-09-11  
论坛里看完了  感觉很不错 谢谢~~
5 楼 lazy_ 2012-09-11  
lazy_ 写道
jyjava 写道
搞技术的直接上代码,一看就知道是怎么回事


一看你的回复就知道是个技术牛人!

想看代码可以看完整版(比较长,看完需要些力气)

http://www.iteye.com/topic/1126635

期望您能在那里回复下,给些意见或者你觉得更好的JS面向对象模式


对于我来说,工作之余,如果几分钟就能看完一篇有意思的文章,而且有所收获,是件赏心乐事。正是基于这样的理念,为了使大家读起轻松愉快,我现在是打算把完整版的分开成一系列的文章,而且后面会比完整版内容更丰富,估计会写到part10,敬请期待。
4 楼 lazy_ 2012-09-11  
jyjava 写道
搞技术的直接上代码,一看就知道是怎么回事


一看你的回复就知道是个技术牛人!

想看代码可以看完整版(比较长,看完需要些力气)

http://www.iteye.com/topic/1126635

期望您能在那里回复下,给些意见或者你觉得更好的JS面向对象模式
3 楼 a83313886 2012-09-11  
我也来呐喊助威[size=small][/size]
2 楼 jyjava 2012-09-10  
搞技术的直接上代码,一看就知道是怎么回事
1 楼 zhou7707 2012-09-10  
  为了顶 一 下,我专门去登陆

相关推荐

    Object-Oriented JavaScript

    ### Object-Oriented JavaScript #### 知识点一:面向对象编程在JavaScript中的应用 - **定义**:面向对象编程(Object-Oriented Programming,OOP)是一种编程范式,它将程序设计围绕“对象”进行组织。在...

    Object-oriented-javascript

    在标题“Object-oriented-javascript”和描述“关于javascipt的一本很不错的书,主要是从初级开始的,面向对象的书。”中,我们可以提取出关于面向对象JavaScript编程的知识点。这本书由Stoyan Stefanov所著,出版于...

    Object-Oriented Programming in Javascript

    本书《Object-Oriented Programming in Javascript》是为了解决如何在JavaScript中正确应用面向对象编程(OOP)问题而撰写的,作者是曾任职于雅虎的前端工程师范 Nicholas C. Zakas。全书将涵盖JavaScript中面向对象...

    Object-oriented programming with C.英文版

    首先,关于书籍标题“Object-oriented programming with C”,它涉及到的是使用C语言进行面向对象编程的概念。尽管C语言本身不直接支持类和继承这样的面向对象特性,但它能够通过特定的设计模式来模拟这些特性。这本...

    No.Starch.The.Principles.of.Object-Oriented.JavaScript

    1. **对象和类**:虽然JavaScript没有传统的类,但它通过构造函数和原型链实现了类的功能。书中会解释如何使用构造函数创建对象,以及如何通过原型链实现继承。 2. **封装**:封装是OOP的关键概念,它涉及将数据和...

    design patterns elements of reusable object-oriented software

    ★附录A介绍了剩下的设计模式:Bridge(桥接)、Builder(生成器)、Chainof Responsibility(责任链)、Flyweight(蝇量)、Interpreter(解释器)、Mediator(中介者)、Memento(备忘录)、Prototype(原型)、...

    object-oriented-javascript

    ### 面向对象的 JavaScript (Object-Oriented JavaScript) #### 概述 面向对象的 JavaScript(简称 OOJS)是一种编程范式,它利用 JavaScript 的特性来实现面向对象的编程方式。面向对象编程(OOP)是现代软件工程...

    The Principles of Object Oriented.JavaScript

    面向对象编程(Object-Oriented Programming,简称OOP)是一种广泛应用于软件开发的方法论,它通过将数据和处理这些数据的方法组织在一起,形成“对象”,从而实现对复杂系统的抽象和管理。《面向对象的JavaScript...

    Object-Oriented JavaScript, 3rd Edition

    首先,本书的标题中提到的“Object-Oriented JavaScript”,是指JavaScript编程语言中面向对象编程的概念。面向对象编程(OOP)是一种编程范式,它使用“对象”来设计软件。对象可以包含数据,以字段的形式表示,也...

    .Principles.of.Object-Oriented.Programming.in.JavaScript

    对于那些熟悉C++或Java等语言中的类为基础的OOP模型的开发者来说,JavaScript提供了另一种实现OOP的方式——基于原型的继承。 #### 书籍简介与适用人群 本书适合所有对JavaScript和面向对象编程感兴趣的开发者。...

    design patterns elements of reusable object-oriented software.docx

    - **原型模式(Prototype)**:用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。 - **适配器模式(Adapter)**:将一个类的接口转换成客户希望的另一个接口。 - **装饰器模式(Decorator)**:...

    prototypal-oo-js-object-oriented-constructor-functions-lab-onlin

    标题中的“prototypal-oo-js-object-oriented-constructor-functions-lab-onlin”表明这是一个关于JavaScript中原型式面向对象编程(Prototype-based Object-Oriented Programming)的实验或练习,特别是涉及构造...

    398——2016-06-06黏贴板+直播原型.rp

    398——2016-06-06黏贴板+直播原型.rp

    Object_Oriented_Javascript

    ### Object_Oriented_Javascript #### 重要概念与知识点概览 **JavaScript**作为一种流行的编程语言,在Web开发中占据着核心地位。随着技术的发展,它不仅限于浏览器环境中的脚本编写,还扩展到了服务器端(如Node...

    Object-Oriented Programming & Design--SYSU

    1. 创建型模式:如单例模式、工厂模式、建造者模式、原型模式,主要用于对象的创建过程,提高代码的灵活性和可维护性。 2. 结构型模式:如适配器模式、装饰器模式、代理模式、桥接模式、组合模式、外观模式、享元...

    Nicholas_C_Zakas-The_Principles_of_JavaScript-EN.pdf

    3. 创建对象的多种方式:JavaScript提供了多种创建对象的途径,包括对象字面量、构造函数、Object.create方法、工厂模式、原型链等。 4. 定义自己的构造函数:构造函数是创建和初始化新对象的函数。JavaScript允许...

Global site tag (gtag.js) - Google Analytics