1

JavaScript クラスがあり、サブクラス化できないようにしたいと考えています。(Java で "final" キーワードを使用してクラスをマークするのと同様です。) これが私の JavaScript クラスです。

function Car(make, model) {
     this.getMake = function( ) { return make; }
     this.getModel = function( ) { return model; }
}
4

3 に答える 3

7

JavaScript オブジェクト指向パラダイムはプロトタイプ ベースです。つまり、オブジェクトは他のオブジェクトから「継承」し、それらをプロトタイプとして使用します。

クラスはなくCarコンストラクター関数であり、この言語により、事実上すべてのオブジェクトを拡張できます。

オブジェクト インスタンスを作成できるCar場合、このオブジェクトが他のコンストラクタ関数のプロトタイプとして使用されるのを防ぐ方法はありません。

于 2009-10-10T19:29:02.450 に答える
1

JavaScript には実際にはクラスがなく (クラスベースではなく、プロトタイプ ベースのオブジェクト システムです)、動的言語であることを考えると [1]、あなたがやりたいことは不可能です。さらに、JavaScript には実際には継承/サブクラス化がありません。オブジェクトをコピーして拡張することで偽装する必要があります。他のコードがこれを行うのを防ぐ方法は (私が知っている限り) ありません。

  1. メタクラスをサポートする動的言語では、このような機能を実装できます。JavaScript はそのような言語ではありません。
于 2009-10-10T19:23:14.113 に答える
0

いいえ、これを直接行うことはできず、Javascript のプロトタイプの継承を考慮してこれを行う方法があることを知りませんが、重いオブジェクト指向型設計を持つ js フレームワークであるExtjsを見てください。APIなどを見て、ソースコードを見ると、行きたい場所に近づくかもしれませんが、完全ではありません:)

于 2009-10-10T20:22:55.337 に答える