Douglas Crockford は、彼の寄生的継承 をここで定義しています。
シンプルで明確な継承パターンを使用したいのですが、オブジェクトのプロトタイプを変更したくないため、Crockford が関数を呼び出すものを定義せずにスーパー メソッドを呼び出したいと考えています。uber
どのようにできるのか?
オブジェクトを変更せずに、ある種の優れた構文を使用したいのですが...これは可能ですか?
Douglas Crockford は、彼の寄生的継承 をここで定義しています。
シンプルで明確な継承パターンを使用したいのですが、オブジェクトのプロトタイプを変更したくないため、Crockford が関数を呼び出すものを定義せずにスーパー メソッドを呼び出したいと考えています。uber
どのようにできるのか?
オブジェクトを変更せずに、ある種の優れた構文を使用したいのですが...これは可能ですか?
彼の例では、次のようになります。
function ZParenizor2(value) {
var that = new Parenizor(value);
that.toString = function () {
if (this.getValue()) {
return this.uber('toString');
}
return "-0-"
};
return that;
}
これになります:
function ZParenizor2(value) {
var that = new Parenizor(value);
that.toString = function () {
if (this.getValue()) {
return Parenizor.prototype.toString.apply(this, arguments);
}
return "-0-"
};
return that;
}
- 編集 -
一方、たとえば BaseObject という名前の新しいクラスを単純に定義し、その上にすべての基本的な拡張メソッド (たとえば、「uber」など) を定義してから、オブジェクト階層をそれに基づいて作成することもできます。