javascript 学习笔记(5)---继承
2010-04-19 21:51
603 查看
1. 某些基类如果不直接使用,而仅仅只是用于给子类提供通用的函数,这种情况下,基类被看作抽象类.
2. 在 javascript 的类中所有的方法和属性都是"公用的".
3. javascript 中的继承并不是明确规定的,而是通过模仿来实现的.有以下方法:
(1). 对象冒充
对象冒充方法可以支持多重类继承,也就是一个类可以继承于多个类
如果存在一个类 C 想继承类 A 和 B,只要这样:
但是要注意如果 A 和 B 中存在同名的属性或者方法,则 B 具有高优先级,因为他是后面的类继承.
(2). call() 方法
(3). apply() 方法
(4). 原型链,原型链不支持多重继承
原型链中 instanceof 运算符的运行方式也很特别,对 B 的所有实例,instanceof 为 A 和 B 都返回 true
(5)混合方式(对象冒充(属性)+原型链(方法))
2. 在 javascript 的类中所有的方法和属性都是"公用的".
3. javascript 中的继承并不是明确规定的,而是通过模仿来实现的.有以下方法:
(1). 对象冒充
function A(sColor){ this.color = sColor; this.showColor = function(){ alert(this.color); }; } function B(sColor,sName){ this.newMethod = A; this.newMethod(sColor); delete this.newMethod; this.name = sName; //新的方法和属性要在删除了新方法的定 义后定义 this.showName = function(){ alert(this.name); }; }
对象冒充方法可以支持多重类继承,也就是一个类可以继承于多个类
如果存在一个类 C 想继承类 A 和 B,只要这样:
function C(){ this.newMethod = A; this.newMethod(); delete this.newMethod this.newMethod = B; this.newMethod(); delete this.newMethod }
但是要注意如果 A 和 B 中存在同名的属性或者方法,则 B 具有高优先级,因为他是后面的类继承.
(2). call() 方法
function B(sColor,sName){ //this.newMethod = A; //this.newMethod(sColor); //delete this.newMethod; A.call(this,sColor); this.name = sName; this.showName = function(){ alert(this.name); }; }
(3). apply() 方法
function B(sColor,sName){ //this.newMethod = A; //this.newMethod(sColor); //delete this.newMethod; A.apply(this,new Array(sColor)); this.name = sName; this.showName = function(){ alert(this.name); }; }
(4). 原型链,原型链不支持多重继承
function A(){ } A.prototype.color = "red"; A.prototype.showColor = function(){ alert(this.color); } function B(){ } B.prototype = new A();
原型链中 instanceof 运算符的运行方式也很特别,对 B 的所有实例,instanceof 为 A 和 B 都返回 true
var Obj = new B(); alert(Obj instanceof A); //outputs "true" alert(Obj instanceof B); //outputs "true"
(5)混合方式(对象冒充(属性)+原型链(方法))
function A(sColor){ this.color = sColor; } A.prototype.showColor = function(){ alert(this.color); }; function B(sColor,sName){ A.call(this,sColor); this.name = sName; } B.prototype = new A(); B.prototype.showName = function(){ alert(this.name); };
相关文章推荐
- JS学习笔记——JavaScript继承的6种方法(原型链、借用构造函数、组合、原型式、寄生式、寄生组合式)
- JavaScript继承学习笔记【新手必看】
- javascript学习笔记 (五) -继承和Closures
- javascript继承之学习笔记
- javascript 学习笔记之面向对象编程(二):继承&多态
- Javascript 设计模式学习笔记(2) - 继承(Inheritance) (上)
- html5学习笔记---05.JavaScript 中的面向对象,继承和封装
- javascript学习笔记(九)javascript中的原型(prototype)及原型链的继承方式
- 【Javascript学习笔记】由JavaScript中call()方法引发的对面向对象继承机制call的思考
- JavaScript 学习笔记八 继承与引用
- JavaScript 学习笔记八 继承与引用
- JavaScript学习笔记_非构造函数的继承
- Javascript学习笔记(Object 对象与继承)
- JavaScript学习笔记——继承
- JavaScript 学习笔记八 继承与引用
- javascript学习笔记(十) js对象 继承
- Javascript学习笔记9——prototype封装继承
- JavaScript继承学习笔记【新手必看】
- JavaScript学习笔记3-JavaScript中的继承2