【笔记】封装可使用的构造函数继承
2015-01-15 10:46
260 查看
读书笔记《javascript面向对象编程指南》
(YUI)库所用的方法:
function extend(Child, Parent) {
var F = function(){};
F.prototype = Parent.prototype;
Child.prototype = new F();
Child.prototype.constructor = Child;
Child.uber = Parent.prototype;
}
另外还有一种拷贝继承方法,属性拷贝:
这种方法与之前的不同,由于已经完成对child的原型进行扩展,不需要再重置child.prototype.constructor属性了,因为它不会再被覆盖。
与之前的方法相比,这个方法在效率上显然略孙一筹。因为这里执行的是对子对象原型的逐一拷贝。而非简单的原型链查询。
这种方式仅适用只包含基本数据类型的对象,所有的对象类型包括函数和数组,都是不可复制的,他们只支持引用传递。
function extend2(Child, Parent) {
var p = Parent.prototype;
var c = Child.prototype;
for (var i in p) {
c[i] = p[i];
}
c.uber = p;
}
var Shape = function(){}
var TwoDShape = function(){}
Shape.prototype.name = 'shape';
Shape.prototype.toString = function(){
return this.name;
}
extend2(TwoDShape,Shape);
var t = new TwoDShape();
t.name
//-->"shape"
t.toString();
//-->"shape"
TwoDShape.prototype.name = 'TwoDShape';
t.name
//-->"2d shape"
t.toString();
//-->"2d shape"
TwoDShape.prototype.toString === Shape.prototype.toString
//-->true
TwoDShape.prototype.name === Shape.prototype.name
//-->false
(YUI)库所用的方法:
function extend(Child, Parent) {
var F = function(){};
F.prototype = Parent.prototype;
Child.prototype = new F();
Child.prototype.constructor = Child;
Child.uber = Parent.prototype;
}
另外还有一种拷贝继承方法,属性拷贝:
这种方法与之前的不同,由于已经完成对child的原型进行扩展,不需要再重置child.prototype.constructor属性了,因为它不会再被覆盖。
与之前的方法相比,这个方法在效率上显然略孙一筹。因为这里执行的是对子对象原型的逐一拷贝。而非简单的原型链查询。
这种方式仅适用只包含基本数据类型的对象,所有的对象类型包括函数和数组,都是不可复制的,他们只支持引用传递。
function extend2(Child, Parent) {
var p = Parent.prototype;
var c = Child.prototype;
for (var i in p) {
c[i] = p[i];
}
c.uber = p;
}
var Shape = function(){}
var TwoDShape = function(){}
Shape.prototype.name = 'shape';
Shape.prototype.toString = function(){
return this.name;
}
extend2(TwoDShape,Shape);
var t = new TwoDShape();
t.name
//-->"shape"
t.toString();
//-->"shape"
TwoDShape.prototype.name = 'TwoDShape';
t.name
//-->"2d shape"
t.toString();
//-->"2d shape"
TwoDShape.prototype.toString === Shape.prototype.toString
//-->true
TwoDShape.prototype.name === Shape.prototype.name
//-->false
相关文章推荐
- js封装可使用的构造函数继承用法分析
- js封装可使用的构造函数继承用法分析
- C++11新特性学习笔记—继承构造函数的使用
- effective C++笔记之条款41、42: 区分继承和模板、明智地使用私有继承
- JavaScript中使用构造函数实现继承的代码
- C++笔记(10)C++箴言:谨慎使用多继承
- JS OO 学习笔记 ——JS封装使用prototype添加方法
- ACE封装——使用继承提高设计清晰和可扩性
- effective C++笔记之条款12: 尽量使用初始化而不要在构造函数里赋值
- 31 天重构学习笔记8. 使用委派代替继承
- 31天重构学习笔记8. 使用委派代替继承
- Exception C++中讨论的异常安全堆栈的,封装内存管理的版本,使用私有继承的方式复用
- [笔记] 多继承下不同基类之同名函数的使用
- C#继承中的静态构造函数和base关键字使用
- 使用句柄类封装继承体系
- 关于继承构造函数执行顺序、override及new如何执行的学习笔记
- 面向对象设计三大原则(封装变化点,对接口进行编程,多使用组合而不是继承)
- 温习Java笔记(5):构造函数、继承和多态
- Hibernate学习笔记:混合使用每个继承结构一张表 和 每个子类一张表
- 静态库 动态库 的封装以及使用 (个人笔记)