0

アイデアは、継承されたクラスRectangleにShapeからcalculateSurfaceメソッドを実装し、Rectangleクラスに渡されたパラメーターを使用してサーフェスを計算することです。

function Shape (w,h){
    this.h = h;
    this.w = w;
    this.calculateSurface = function (){
        return this.w*this.h;
    };
}

function Rectangle (w,h){
    Shape.apply(this, arguments);
    this.w = w;
    this.h = h;
    this.calcSurface = function(){
        return Shape.calculateSurface(this.w, this.h);
    };
}

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

var rec = new Rectangle(4,4);

console.log(rec.calcSurface());

私が得るエラーは次のとおりです。

    Uncaught TypeError: Object function Shape(w,h){
    this.h = h;
    this.w = w;
    this.calculateSurface = function (){
        return this.w*this.h;
    };
} has no method 'calculateSurface' 
4

3 に答える 3

2

この線...

return Shape.calculateSurface(this.w, this.h);

calculateSurface()関数のメソッドを探していますShape()。そこにないことを除いて、コンストラクターによって返されたオブジェクトにあります。

あなたはこのようなものが欲しい...

var self = this;
this.calcSurface = function(){
    return self.calculateSurface(this.w, this.h);
};

jsFiddle .

また、のプロパティに配置calculateSurface()する価値があるかもしれません。そうすれば、多くのオブジェクトを作成する場合でも、メソッドはメモリ内に 1 回しか存在しません。ShapeprototypeShape

于 2012-10-29T11:53:52.247 に答える
0

代わりにこれを使用してください:

return (new Shape(this.w, this.h)).calculateSurface(this.w, this.h);
于 2012-10-29T11:56:16.963 に答える
0

変化する

return Shape.calculateSurface(this.w, this.h);

return this.calculateSurface(this.w, this.h);

Rectangleプロトタイプを指しているためShape

Rectangle.prototype = new Shape();

于 2012-10-29T11:59:32.997 に答える