例えば:
object1 = function() {
console.log('action1');
}
object2 = function() {
console.log('action2');
}
object1(); //should log "action1"
object2(); //I need this to log "action1" and "action2"
また、object2 が object1 のメソッドをオーバーライドできるようにする必要があるため、上記はどこにもありません (メソッドが含まれていません)。
私が探していない、私が考えた解決策は次のとおりです。
object2 = object2 = function() {
object1(); //this won't allow me to override object1's methods. THIS IS IMPORTANT!!
console.log('action2');
}
設計図 (プロトタイプ) のみを構築して利用する試みを次に示します。
object1 = function() {};
object1.prototype.action1 = function() {
console.log('action1');
}
object2 = function() {};
object2.prototype = new object1();
object2.prototype.constructor = object2;
//object2.prototype.action1 = function() { //I can overwrite the inherited action here
// console.log('actionCHANGED');
//}
object2.prototype.action2 = function() {
console.log('action2');
}
var foo = new object2(); //new object1(); will do object1's actions instead, as desired.
for (var method in foo) { //run all of foo's methods
foo[method]();
}
しかし、これも実際には機能しません。通常、関数は順不同で実行されます (明らかな理由により)。
拡張を使用して他のいくつかのアプローチを試しましたが、探しているものがまったく得られません。現時点では例が思い浮かびませんが、他の方法の 1 つは object2 を正確に実行させましたが、object1 にはプロトタイプ関数しかなかったため、「new object1()」では何も起こりませんでした。関数を object1 の実際の関数に移動すると、object2 がそれを継承するときにそのアクションが実行されますが、これもこの場合は適切ではありません。
私のアプローチ全体を変更する必要があるかもしれません。私はアイデアを受け入れます。これの実際の目的は、整理されていない手続き型の YouTube プラグインを書き直すことです。簡単に呼び出して、動作を変更できるようにしたいと思います。
$('selector').youtubePlayer({type:'basic'}) //like object1
$('selector').youtubePlayer({type:'withThumbs'}) //like object2
$('selector').youtubePlayer({type:'allFeatures'}) //even more complex object
しかし、jQuery はここでは重要な詳細ではありません...jQuery がなくても同じように機能する必要があります。お気に入り:
youtubePlayer(selector, type);
また
new youtubePlayer(selector, type);
というわけで...ここまでです。私の無知を助けてください(そして言い訳してください)。私はこれを学ぶために一生懸命努力してきました。ありがとう!
編集:これはまさに私がこれでやっていることです。
実際の例: object1 (または関数 1) には 2 つのメソッド (関数) があります。object1 の最初の機能は、div をセレクターにアタッチすることです。object1 の 2 番目の機能は、YouTube API をロードすることです。YouTube プレーヤーは、API の読み込み時に上記の div に読み込まれます。
object2 には 2 つのメソッドがあります。object2 の最初の機能は、可能であればキャッシュから YouTube プレイリスト フィードを取得することです。そうでない場合は、YouTube からフィードを取得してキャッシュに保存します。object2 の 2 番目の機能は、フィードからサムネイルを表示することです。
object3 には同じ方法でさらに多くの機能があり、object3 の前に実行される object2 の機能に完全に依存しています。
オブジェクト 1 のアクションだけが必要な場合は、「object1();」とだけ記述します。または "new object1(); など、オブジェクトごとに。