作者:Jeff.Yan(阎宏),BlueSwing.Liu(刘如鸿)
模式:

Prototype(原始模型模式或者原型模式)                  
定义:
通过给出一个原型对象来指明所要创建的对象的类型,然后用这个原型对象的方法创建出更多同类型的对象,原始模型模式属于对象的创建模式
JavaScript实现:
在Java语言中对象都继承自java.lang.Object,而java.lang.Object就提供了Clone的方法,只要实现接口Cloneable,即表示支持Clone,否则抛出异常。在这点JavaScript是非常接近的,所有的对象都是从Object继承,不过Object并不支持Clone的方法,但是我们可以通过自己对于JavaScript通过expanddo的形式实现Clone方法,这样日后所有的对象创建都实现了Clone方法。
因为JavaScript本身没有提供Clone的方法,同时对于对象的赋值如var a=new Object();var b=a,这样的代码a,b是指向同一对象的,要创建一个对象必须通过new 这个关键字来实现,因此在Clone的实现过程,我内部定义了一个构造子(constructor)CloneModel,同时指定其父对象为要进行Clone活动本身的对象,因此使用了this关键字,在我们定义的构造子CloneModel的基础上我们创建一个一个对象,因为构造子内部没有任何代码,新创建的对象实际上说所有的实现都在父对象中,也就是我们需要进行Clone的对象。到目前为止,我们已经创建了一个需要复制的对象,但是所有的值都是指向父对象的。
在 JavaScript的面向对象方式中 ,我们曾经讨论过,如果没有覆盖父对象的值,那么这个时候是直接指向父对象的,在Prototype Pattern是要求Clone之后的对象的内部值是不应该相关的,而只要赋值一次,objClone的值都会在自己的内存空间里头,而不是还指向父对象。基于如此的考虑,objClone[v]=objClone[v];语句就是实现将父对象的值通过覆盖的方式拷贝到自己的内存来。(这里提及的内存应该是逻辑意义上的)
 
深复制的实现
在完成上述工作之后,只是实现了浅复制,对象方面依然是指向对象的引用,这个时候可以通过调用指向对象的Clone方法得到cloned对象的属性对象(因为不知道如何说了)。objClone[v]=objClone[v].Clone(); 这句代码就是完成如此的功能。

Clone方法的实现
对象类的定义
测试代码


结束语:
按照我目前的理解和测试,我觉得prototype关键字不是prototype模式的实现,这点通过parent object可以得到验证。

转载于:https://www.cnblogs.com/coolcat/archive/2005/10/18/257138.html

JavaScript的Prototype实现相关推荐

  1. JavaScript 笔记 ( Prototype )

    这阵子实在好忙 ( 这样说好像也不是一两个月了... ),然后因为工作伙伴都是 JavaScript 神之等级的工程师,从中也学到不少知识,毕竟就是要和强者工作才会成长呀!为了想好好瞭解他们写的程式码 ...

  2. JavaScript原型Prototype详情

    文章来源: 学习通http://www.bdgxy.com/ 目录 1.概述 1.1原型是什么 1.2获取原型 2.原型属性 2.1利用原型添加属性与方法. 2.2访问原型属性原型方法 3.自有属性与 ...

  3. Javascript的prototype

    JavaScript是基于对象的,任何元素都可以看成对象.然而,类型和对象是不同的.本文中,我们除了讨论类型和对象的一些特点之外,更重要的是研究如何写出好的并且利于重用的类型.毕竟,JavaScrip ...

  4. JavaScript:Object.prototype.toString进行数据类型判定

    在JavaScript中,想要判断某个对象值属于哪种内置类型,最靠谱的做法就是通过Object.prototype.toString方法. var arr = []; console.log(Obje ...

  5. JavaScript 面向对象 (prototype 原型模式)

    一. JavaScript 设计思想 1994年,网景公司(Netscape)发布了Navigator浏览器0.9版.这是历史上第一个比较成熟的网络浏览器,轰动一时.但是,这个版本的浏览器只能用来浏览 ...

  6. JavaScript:Object.prototype.toString方法的原理

    在JavaScript中,想要判断某个对象值属于哪种内置类型,最靠谱的做法就是通过Object.prototype.toString方法. var arr = []; console.log(Obje ...

  7. JavaScript:prototype属性使用说明

    prototype 是在 IE 4 及其以后版本引入的一个针对于某一类的对象的方法,而且特殊的地方便在于:它是一个给类的对象添加方法的方法!这一点可能听起来会有点乱,别急,下面我便通过实例对这一特殊的 ...

  8. javascript之prototype原型属性案例

    练习: 给字符串对象添加一个toCharArray的方法,然后再添加一个reverse(翻转)的 方法 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML ...

  9. 我所知的javascript之prototype

    一:prototype大概概念和用途 "prototype"字面翻译是"原型",是javascript实现继承的主要手段.粗略来说就是:prototype是ja ...

最新文章

  1. Activiti——流程变量(六)
  2. Python,OpenCV中的K近邻(knn K-Nearest Neighbor)及改进版的K近邻
  3. ATEN旗下品牌K博士强势出击个人级/小型商用市场
  4. java输出回文数原代码_leetcode 9 回文数
  5. eclipse+ADT 进行android应用签名打包详解
  6. python中cd是什么意思_python的cd的
  7. HDU 5389 Zero Escape
  8. 北邮OJ 980. 16校赛-R_clover's Challenge
  9. Redis安装部署配置说明
  10. Windows下Maven的安装与配置
  11. 今天听说了一个压缩解压整型的方式-group-varint
  12. 用python当壁纸_使用Python脚本将Bing的每日图片作为桌面的教程
  13. Python实例讲解 -- wxpython 最小到托盘及欢迎图片
  14. @Controller @ResponseBody @RestController的基本含义与使用方法
  15. java集合之列表:ArrayList、Vector、LinkedList
  16. 使用一重循环打印乘法口诀
  17. 2021-08-27小白比记4
  18. 解决打开WORD时提示的:“无法复制文件:无法读源文件或磁盘”
  19. MongoDB5.0安装总结(简单)
  20. mysql pdo_数据库PDO简介

热门文章

  1. canvas画布属性globalAlpha 和 createRadialGradient函数出现的设置问题
  2. 一个简单问题引发对IEnumerable和IQueryable的思考
  3. [C++对象模型][8]多重继承与虚函数表
  4. [转]数据仓库,OLAP与数据挖掘之间的关系
  5. 从“小而精”到“大而广”,知乎怎样一步步迈向全民皆知?
  6. 为什么越来越多的手机浏览器转型新闻客户端?
  7. Jmeter性能测试-GC相关
  8. 小试牛刀chrome来调试APP
  9. 个人作业-Week2:案例分析
  10. c# 如何设置透明画刷