このJSBinのコードで、MultiPage.Nullo または MultiPage.datacontext を記述できるようにするために、MultiPage に Tool の静的メンバーを継承させるにはどうすればよいですか?
2 に答える
MultiPageにToolの静的メンバーを継承させるにはどうすればよいですか
不可能だよ。関数はからのみ継承できFunction.prototype
、その間には何も継承できません。
ただし、その必要はありません。JavaScriptはクラスベースの言語ではなく、実際の問題に対するより良い解決策があります。ユースケースについてはまだ説明していませんが、標準的な解決策は、プロパティをオブジェクトに配置するか、からでもprototype
アクセスすることです。Tool.datacontext
Multipage
静的メンバーを継承したい場合は、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をサポートしています。ただし、リンクされたドキュメントでわかるように、この関数はあらゆる種類のエンジンの最適化を中断します。通常、プログラムを構築してその欠点を回避できるため、これを使用することはお勧めしません。