1

私は Jquery を使用して長いコードを書いていましたが、ご存じのように単純なプロジェクトのように見えましたが、複雑さが増すと、関数とコードが至る所で繰り返される扱いにくいスパゲッティのように見えます。したがって、次のようなオブジェクトにすべての機能を注ぎ始めました。

function MyObject(container) {
    this.container = container
};

Notifications.prototype.featureOne = function (arg1, arg2){

};

Notifications.prototype.featureTwo = function (arg1, arg2, arg3){

};

obj1 = new Notifications($('#container'));
obj1.featureOne('arg1', 'arg2');
obj1.featureOne('arg1', 'arg2', 'arg3');

明らかに、それは何が起こっているのかを非常に簡単に知ることができますが、別のコードと非常によく似たコードがあることに気付きました (特に、2 つの引数を受け入れる ajax 関数と、以前と同じ 2 つの引数と追加の 1 つを受け入れる別の ajax 関数)。私に何ができる?そこに両方の​​ケースをラップする関数を作成する新しいプロトタイプ メソッドを作成しますか?

別の質問: Javascript で OOP を処理するときに使用するベスト プラクティスは何ですか?

ありがとう!

4

1 に答える 1

1

プロトタイプの継承は次のように機能します。「クラス」があるとします。

// original "class"
var SomeObject = function( constructorArg1 ) {
   this.someProperty = constructorArg1;
};
SomeObject.prototype.method1 = function( arg1, arg2 ) {
   // some code
};

ここで、method1 を継承するだけでなく、さらに追加するクラスを作成したいとします。

// new "class" which inherits from first "class"
var SomeOtherObject = function( constructorArg1 ) {
   this.someProperty = constructorArg1;
};
// inheritance happens here
SomeOtherObject.prototype = new SomeObject();
// must also set the constructor as part of prototypical inheritance
SomeOtherObject.prototype.constructor = SomeOtherObject;
// add a second method to your new "class"
SomeOtherObject.prototype.method2 = function( arg1 ) {
   // some code
};

元のコンストラクターを継承できず、親クラスのメソッドが上書きされると呼び出すことができないため、システムが完全ではないことがわかりますが、最初の「クラス」のプロトタイプに追加されたすべてのメソッドは現在新しい「クラス」で利用できます。

古典的な継承をシミュレートするためにこのアイデアを試す方法は約 100 あり、拡張クラス内から上書きされた親メソッドを呼び出すことができるなど、希望どおりに動作するように設定することができます。古典的な継承をシミュレートする多くのメソッドプロトタイプの継承をまったく使用せず、代わりに、あるプロトタイプから別のプロトタイプにメソッドをコピーするだけです。何が最適かを確認するには、検索または実験を行う必要があります。

于 2012-06-14T17:56:01.837 に答える