Javascript类继承

时间:2011-09-29 15:32:57

标签: javascript jquery inheritance

我正在尝试学习如何在javascript中使用“类”。

这是我的代码:

function Shape(x, y) {
    this.x= x;
    this.y= y;    
}

Shape.prototype.toString= function() {
        return 'Shape at '+this.x+', '+this.y;
    };

function Circle(x, y, r) {
    Shape.call(this, x, y); // invoke the base class's constructor function to take co-ords
    this.r= r;
}
Circle.prototype= $.extend(true, {}, Shape.prototype);

Circle.prototype.toString= function() {
    return 'Circular '+Shape.prototype.toString.call(this)+' with radius '+this.r;
}

var c = new Circle(1,2,3);
alert(c);

有没有办法在它的构造函数中定义Shape的toString函数,或者在这种情况下没有意义?

1 个答案:

答案 0 :(得分:0)

基于我的理解:

  1. 当您将.toString()移动到构造函数中时,.toString()将成为您实例的显式成员。因此,对.toString()的任何调用都将触发该显式成员。
  2. 示例:http://jsfiddle.net/paptamas/qDSkj/

    1. 但是当你将它定义为原型时(在缺少一个名为.toString()的显式成员的情况下),对.toString()方法的任何调用都会触发为调用类型定义的.toString()函数对象(在你的情况下是圆圈)。
    2. 示例:http://jsfiddle.net/paptamas/cbnLB/

      换句话说,显式成员优先于原型定义,当你说

      this.toString = function() ...
      

      您将该函数定义为您的实例的成员(与您的类型的成员相对 - 这也是未经优化的方式)。

      问候。