私が構築している多くのアプリケーションの OOP 継承パターンを設計しています。Javascript にはこれを行う多くの方法がありますが、私が本当に気に入っているパターンに出くわしました。しかし今、私はクラスとインスタンスを分離する必要性に苦しんでいます。
Root という基本オブジェクトがあります。そして、継承と呼ばれるメインメソッドがあります。使用する新しいオブジェクトを作成するには
var Person = Root.inherit({
name : "",
height : 0,
walk : function() {},
talk : function() {}
});
次に、「インスタンス」を作成するには、
var sally = Person.inherit({
name : "sally",
height : "5'6"
});
サリーは .talk() ができ、彼女は walk() ができ、.name と .height を持っています 同じ方法でより多くの人を作ることができます。
使用するコンストラクターが必要な場合
var Person = Root.inherit({
_construct : function() {
// do things when this object is inherited from
},
name : "",
height : 0,
walk : function() {},
talk : function() {}
});
また、オブジェクトがコードで最初に定義されるときに init を持つ機能もあります (シングルトンはこれを使用します)。
var Person = Root.inherit({
_init : function() {
// called at runtime, NOT called if an object is inherited from me
},
name : "",
height : 0,
walk : function() {},
talk : function() {}
});
ご覧のとおり、すべてが .inhert() を使用しています。実際にはクラスもインスタンスもありません。すべては何かのインスタンスです。これまでに見つけた唯一の本当の問題は、「タイプ」の概念がないことですが、必要に応じていつでもメソッドを確認できます。また、「クラス」を保護することはできません。開発者が誤って変更した場合、または変更しようとした場合、実行中に「クラス」が変更される可能性があるためです。
私の質問は次のとおりです。クラス構造とクラスのインスタンスを明示的かつ制御的に分離する必要がありますか? すべてのオブジェクトをインスタンスとして扱うことに問題はありますか?