JavaScript的Prototype实现
发布时间:2020-12-16 03:22:39 所属栏目:百科 来源:网络整理
导读:模式: ??? Prototype(原始模型模式或者原型模式) 定义: ??? 通过给出一个原型对象来指明所要创建的对象的类型,然后用这个原型对象的方法创建出更多同类型的对象,原始模型模式属于对象的创建模式 ? javascript实现: ??? 在Java语言中对象都继承自java.l
模式: ??? 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可以得到验证。
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- ruby-on-rails-3 – 通过link_to合并嵌套参数
- 微信小程序实战–集阅读与电影于一体的小程序项目(三)
- ruby-on-rails – 我如何知道gem与某种版本的rails兼容?
- XSLT 1.0中的“正则表达式”式替换
- cocos2d-x create_project.py python3版本
- c – 从用户应用程序访问ring 0模式(为什么Borland允许这样
- iphone – 调整大小UISearchDisplayController灰色黑色叠加
- c – 我可以从constexpr函数返回一个可选项吗?
- 如何在C中逐行读取文件中的整数组
- Oracle WebCenter Content无法启动错误的处理