0

このJSBinのコードで、MultiPage.Nullo または MultiPage.datacontext を記述できるようにするために、MultiPage に Tool の静的メンバーを継承させるにはどうすればよいですか?

4

2 に答える 2

1

MultiPageにToolの静的メンバーを継承させるにはどうすればよいですか

不可能だよ。関数はからのみ継承できFunction.prototype、その間には何も継承できません。

ただし、その必要はありません。JavaScriptはクラスベースの言語ではなく、実際の問題に対するより良い解決策があります。ユースケースについてはまだ説明していませんが、標準的な解決策は、プロパティをオブジェクトに配置するか、からでもprototypeアクセスすることです。Tool.datacontextMultipage

于 2012-12-14T13:34:06.550 に答える
0

静的メンバーを継承したい場合は、Tool のプロパティを MultiPage にコピーするしかありません。jQuery や Underscore を使えば簡単です。

$.extend(MultiPage, Tool);
_.extend(MultiPage, Tool);

extendユーティリティ ライブラリを追加したくない場合は、簡単に独自のものを作成できます。

function extend(target, source) {
    for(var key in source) {
        if (source.hasOwnProperty(key) && key !== 'prototype') {
            target[key] = source[key];
        }
    }
}

単純に静的プロパティを継承できない理由は、コンストラクター関数自体が 以外の内部クラスを持つことができないためですFunction。したがって、コンストラクター関数prototype(独自のprototypeプロパティではなくFunction.prototype、コンストラクター関数オブジェクトを直接拡張する) は常にFunction.prototype、同じグローバル スコープ内のすべての関数間で共有されます。

アップデート

2016 年現在、主要なブラウザはObject.setPrototypeOfをサポートしています。ただし、リンクされたドキュメントでわかるように、この関数はあらゆる種類のエンジンの最適化を中断します。通常、プログラムを構築してその欠点を回避できるため、これを使用することはお勧めしません。

于 2012-12-14T12:42:46.713 に答える