3

オンラインで見つけたさまざまな例に基づいて、JavaScriptでポリモーフィズムを練習しています(初めて試してみました)。他の言語では、拡張されたものからスーパークラスの変数にアクセスできることを知っており、JavaScriptでこれを正しく行う方法を考えています。以下のコードはエラーをスローしませんが(少なくともFirefoxのエラーコンソールに関する限り)、statementで定義されていませんExtendedClass

function MyClass() {
  this.statement = "I'm a class with a method";
  this.speak = function() {
    alert(this.statement);
  }
}
var mInstance = new MyClass();
mInstance.speak();

function ExtendedClass() {
  Object.create(MyClass);
  this.speak = function() {
    alert(this.statement+" and I extend a class");
  }
}
var eInstance = new ExtendedClass();
eInstance.speak();

statementからアクセスできますExtendedClassか?これはポリモーフィズムを実装するための良い方法ですか?

4

3 に答える 3

2

を使用MyClass.call(this)してローカル変数を設定してから、Object.createを使用して次のようにプロトタイプを設定できます。

function MyClass() {
  this.statement = "I'm a class with a method";
  this.speak = function() {
    alert(this.statement);
  }
}
var mInstance = new MyClass();
mInstance.speak();

function ExtendedClass() {
  MyClass.call(this);
  this.speak = function() {
    alert(this.statement+" and I extend a class");
  }
}
ExtendedClass.prototype = Object.create(MyClass.prototype);
var eInstance = new ExtendedClass();
eInstance.speak();

MDNDocsで詳細を確認できます

于 2013-01-14T03:24:15.770 に答える
1

私はこのようにします

function MyClass() {
  this.statement = "I'm a class with a method";
  this.speak = function() {
    alert(this.statement);
  }
}
var mInstance = new MyClass();
mInstance.speak();

function ExtendedClass() {
  MyClass.call(this);
  this.speak = function() {
    alert(this.statement+" and I extend a class");
  }
}
var eInstance = new ExtendedClass();
eInstance.speak();

これが最良の構文であるかどうかはわかりませんが、これが機能することはわかっており、すべてのパブリックメソッドと変数でMyClassを適切に継承します。

于 2013-01-14T03:23:09.550 に答える
1

プロトタイプはあなたが探しているものです。

var MyClass = function(){}; //Empty Constructor
MyClass.prototype = {
    statement: "I'm a class with a method",
    speak: function(){
        alert(this.statement);
    }
};
var ExtendedClass = function(){}; //Empty Constructor
ExtendedClass.prototype = new MyClass();
ExtendedClass.prototype.speak = function(){
    alert(this.statement+" and I extend a class");
};
var eInstance = new ExtendedClass();
eInstance.speak();
于 2013-01-14T03:23:16.167 に答える