1

Douglas Crockford は、彼の寄生的継承 をここで定義しています。

シンプルで明確な継承パターンを使用したいのですが、オブジェクトのプロトタイプを変更したくないため、Crockford が関数を呼び出すものを定義せずにスーパー メソッドを呼び出したいと考えています。uberどのようにできるのか?

オブジェクトを変更せずに、ある種の優れた構文を使用したいのですが...これは可能ですか?

4

1 に答える 1

1

彼の例では、次のようになります。

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」など) を定義してから、オブジェクト階層をそれに基づいて作成することもできます。

于 2012-07-26T17:53:01.437 に答える