学习 Douglas Crockford 的“原型式继承”
2010-01-07 17:27
232 查看
在《JavaScript高级程序设计(第2版)》和《JavaScript语言精粹》这两本书中都有这段代码:
在函数中,定义了一个临时的构造函数,函数的参数 o 是传入的对象,它赋给了这个构造函数的原型。然后返回了实例。实质是传入的对象执行了一次浅拷贝。
优点:不用去创建构造函数。
缺点:引用类型的属性会共享其值。
如何解决这个缺点呢?在《JavaScript设计模式》的第4章中是用了工厂方式来创建引用类型值的childObject:
childObject 是 CompoundObject 的子对象。通过 CompoundObject 的 createChildObject() 方法的返回值并赋给了它。compoundObjectClone 是 CompoundObject 的“原型式继承”的对象,它的 childObject 中的属性进行了重新的赋值定义。
(完)
Object.beget = function (o) { function F() {}; F.prototype = o; return new F; };
在函数中,定义了一个临时的构造函数,函数的参数 o 是传入的对象,它赋给了这个构造函数的原型。然后返回了实例。实质是传入的对象执行了一次浅拷贝。
优点:不用去创建构造函数。
缺点:引用类型的属性会共享其值。
如何解决这个缺点呢?在《JavaScript设计模式》的第4章中是用了工厂方式来创建引用类型值的childObject:
var CompoundObject = {}; CompoundObject.createChildObject = function(){ return { num: [10] }; } Compound.childObject = CompoundObject.createChildObject(); var compoundObjectClone = Object.beget(CompoundObject); compoundObjectClone.childObject = CompoundObject.createChildObject(); compoundObjectClone.childObject.num = [5];
childObject 是 CompoundObject 的子对象。通过 CompoundObject 的 createChildObject() 方法的返回值并赋给了它。compoundObjectClone 是 CompoundObject 的“原型式继承”的对象,它的 childObject 中的属性进行了重新的赋值定义。
(完)
相关文章推荐
- JS学习笔记——JavaScript继承的6种方法(原型链、借用构造函数、组合、原型式、寄生式、寄生组合式)
- js设计模式学习之面向对象的javascript(三)--原型式继承
- JS基础学习第七天:对象原型及原型式的继承
- 【JavaScript学习】面向对象的程序设计(6):原型式继承
- 原型式继承
- “标准容器中存放引用”与“指向引用的指针(pointer to reference)”
- python类学习以及mro--多继承属性查找机制
- Ruby 学习四 (类、对象和变量二 类的继承和属性)
- Python3 学习笔记 -- 继承
- JAVA学习(10) 继承(6) 使用父类类型调用子类
- Hibernate学习_016_继承映射
- C_PlusPlus学习笔记 - 6_继承与派生(C++语言程序设计【第三版】 郑莉等,清华大学出版社)
- Javascript学习笔记(Object 对象与继承)
- js进阶学习之--面向对象继承
- Netty4学习笔记(5)-- NioEventLoopGroup继承层次结构
- Android学习自定义View(四)——继承控件(滑动时ListView的Item出现删除按钮)
- 学习笔记之深入浅出MFC 第8章 C++重要性质----基类与派生类:谈继承(Inheritance)
- 学习C++中的继承
- C#学习——继承接口多态