JS继承,两个不同的版本

时间:2017-03-15 07:03:07

标签: javascript inheritance

目前我正在读一本关于OO / PB JS的书。 在继承方面,描述了几种不同的方式。

下面我贴了两种不同的方法。 第二个版本大部分时间都在本书中使用。 我无法理解为什么,因为第一个似乎更优雅,因为没有像第二个版本中使用的过时功能F. 谁能告诉我第二个版本的优势或者为什么它存在?

版本1:

function Shape() {}

Shape.prototype.name = 'Shape';
Shape.prototype.toString = function() {
    return this.name;
};

function Triangle(side, height) {
    this.side = side;
    this.height = height;
}

Triangle.prototype = new Shape();
Triangle.prototype.constructor = Triangle;

Triangle.prototype.name = 'Triangle';
Triangle.prototype.getArea = function() {
    return this.side * this.height / 2;
};

var myTriangle = new Triangle(5, 10);

第2版:

function Shape() {}

Shape.prototype.name = 'Shape';
Shape.prototype.toString = function() {
    return this.name;
};

function Triangle(side, height) {
    this.side = side;
    this.height = height;
}

function F() {};

F.prototype = Shape.prototype;
Triangle.prototype = new F();
Triangle.prototype.constructor = Triangle;
Triangle.prototype.name = 'Triangle';
Triangle.prototype.getArea = function() {
    return this.side * this.height / 2;
};

var myTriangle = new Triangle(5, 10);

0 个答案:

没有答案