この投稿では、大量のJavaScriptアプリケーションに継承を実装する方法を説明します。
プロジェクトが多くの関連するクラスを必要とし、そうではないクラスを想定します。
各タイプの動作を別々のクラスで記述しようとすると、多くのクラスが存在する可能性があります。 そして、最終クラスには十数人の先祖がいる可能性があります。 この場合、プロトタイプを介した通常のJavaScriptの継承では不十分な場合があります。 たとえば、先祖クラスの同様のメソッドを呼び出すメソッドからの機会が必要でした。 そして、クラスのいくつかの静的プロパティとメソッドを作成して継承したいと考えました。 この機能は、クラスごとに次のf-ju拡張を呼び出すことで追加できます。
拡張機能
cSO = {};
それがどのように機能するかについての小さなチェック、および拡張の結果()
それぞれ3つのクラスを作成します。前のクラスの相続人です。
cSO.class001 = function() { } cSO.extend(cSO.class001, 0, {"statConstruct":function(sc1) { console.log("statConstruct001"); }});
そして今、私たちは彼らの行動が実行される順番を見つけます。
var obj001 = new cSO.class001(); var obj002 = new cSO.class002(); var obj003 = new cSO.class003(); obj001.construct();
私にとって重要だと思われたいくつかのタッチ
毎日の練習の結果、おおよそ次のオブジェクトの構造があります。
_class={ construct:function(){},
では、その理由を説明します。
クラスを作成するには、コンストラクターを呼び出す必要があります。コンストラクターは、このクラスの子オブジェクトを作成するときにnew Foo()が呼び出されないときに呼び出されます。
以下に例を示します。
var id = 0; var Foo = function() { this.id = id++; console.log(" , boom"); } foo.prototype.boom = function() {} var Bar = function() { } Bar.prototype = new Foo(); var fooOb = new Foo();
そして、Fooクラスの相続人であるすべてのオブジェクトに一意のIDを持たせ、爆発できることをユーザーに警告したいと思います。
これを実装するには、特別なcnstructメソッドを作成し(コンストラクターは既に使用されています)、各オブジェクトを作成するときに実行します。 実行することを忘れないために、新しいFoo()でオブジェクトを作成することを拒否し、静的メソッドFoo.stat.create()でオブジェクトを作成します。
以下は、クラスを取得する方法の例として、実際に使用されるクラスの短縮バージョンです。
実際の例
このクラスは、基本クラスから最終クラスまでのプロトタイプチェーン内の多くの1つ(ほとんどの場合、反対方向)と見なす必要があります。
(function() { var _class = cSO.LocalStorageSyncDataType = function () { } cSO.extend(_class, cSO.ServerSyncDataType, {"statConstruct": function() { this.protoFunc("construct", arguments);
このアプローチは、特にオブジェクトクラスに使用する必要があり、「孤立した」オブジェクト(cSO.localStorageなど)には、従来のオブジェクトファクトリを使用する価値があると付け加えます。
PSこのアプローチでは、ほとんどのプログラミング概念と実行速度が大幅に低下することを理解しています。
また、そのようなスタイルは新しいものではなく、より適切なスタイルが他にもあることを理解しています(それらを指定してくれてありがとう)。
PSコードを大いに誓わないでください。私の問題は、他の人に自分のコードをほとんど見せなかったことです。
個人的なブログで