从子对象中访问父对象。
经典的面向对象语言都有语法可以在子类中访问父类,其实就是可以直接调用父类的引用。有的时候,我们在子类写一个方法,需要用到父类的方法时候,这个特性就格外有用了。在许多应用中,子类创建一个和父类相同的方法,并且在这个方法中调用父类的方法。在Javascript中并没有这个这种语法。但是很容易就能完成这个功能,让我们看如下的代码。
function Shape(){}
Shape.prototype.name = 'shape';
Shape.prototype.toString = function(){
var result = [];
if (this.constructor.uber) {
result[result.length] = this.constructor.uber.toString();
}
result[result.length] = this.name;
return result.join(', ');
};
function TwoDShape(){}
var F = function(){};
F.prototype = Shape.prototype;
TwoDShape.prototype = new F();
TwoDShape.prototype.constructor = TwoDShape;
TwoDShape.uber = Shape.prototype;
TwoDShape.prototype.name = '2D shape';
function Triangle(side, height) {
this.side = side;
this.height = height;
}
var F = function(){};
F.prototype = TwoDShape.prototype;
Triangle.prototype = new F();
Triangle.prototype.constructor = Triangle;
Triangle.uber = TwoDShape.prototype;
Triangle.prototype.name = 'Triangle';
Triangle.prototype.getArea = function(){return this.side * this.height / 2;}
新的不同在于
1.用uber的属性指向了父的prototype.
2.toString方法重写。
前一个例子中,toString方法返回了this.name,这个例子中首先检查this.constructor是否存在,存在的话就调用toString.this.constructor是函数自己本身。而this.constructor.uber指向了父的prototype.结果就是当调用Triangle实例的toString方法,所有的prototype链上的toString方法都被调用了。
var my = new Triangle(5, 10);
my.toString();//"shape, 2D shape, Triangle"
不要把uber并不是所谓的父类,意思就是不像其他面向语言的super或base之类的。
分享到:
相关推荐
在JavaScript中继承是一个非常复杂的话题,比其他任何面向对象的语言中的继承都复杂得多。在大多数其他面向对象语言中,继承一个类只需使用一个关键字即可。与它们不同,在JavaScript中要想达到传承公用成员的目的,...
JavaScript继承的三种方法实例 继承 继承: 首先继承是一种关系,类(class)与类之间的关系,JS中没有类,但是可以通过构造函数模拟类,然后通过原型来实现继承。 继承也是为了数据共享,js中的继承也是为了实现...
Javascript继承机制原理 可以参考下
浅析Javascript原型继承,浅析Javascript原型继承
javascript控件开发之继承关系的源码
JavaScript继承与多继承实例分析.docx
javascript继承之为什么要继承.docx
javascript 继承派生等问题的资料,都是网上收集的,学会apply call 就懂js面向对象的原理了。
JavaScript继承机制研究.pdf
NULL 博文链接:https://yueyemaitian.iteye.com/blog/785325
理解Javascript原型继承原理
javascript 五种继承简介。
我们还知道,面向对象编程有三个重要的概念 - 封装、继承和多态。 但是在JavaScript的世界中,所有的这一切特性似乎都不存在。 因为JavaScript本身不是面向对象的语言,而是基于对象的语言。
javascript原型继承,prototype的使用,可以像java一样继承
Javascript继承[参考].pdf
JavaScript Inheritance ...And you think you’re so clever ...JavaScript的原型继承比类继承有更强大的表现力,现在就让我们来看看。 Java JavaScript 强类型 弱类型 静态 动态 基于类 基于原型 类
Javascript原型继承Javascript原型继承Javascript原型继承
浅析javascript原型继承机制,浅析javascript原型继承机制
JavaScript继承机制探讨及其应用.pdf
JavaScript面向对象编程中使用继承,详细讲解四种实现方法的原理。