私がjavascriptについて気に入らないことの1つは、何かを行う方法が何百もあるということです。私が知りたいことは、どのようにクラスを宣言するのですか? function()アプローチを使用しますか? Class.create()を呼び出しますか? 「標準的な練習」とは何ですか?メンバー機能を宣言するための「標準的な練習」とは何ですか?私はプロトタイプを使用していますか? myClass.method()を使用しますか?最後に、どのように私は基本的な親子の継承を行うのですか?私が求めている理由は、インターネット上で私はこれらのことをするための多くの方法を受けているからです。私は「標準的な練習」が何であるか知りたい。JavaScriptで親クラスと子クラスを宣言するにはどうすればよいですか?
答えて
Javascriptでクラスや特にサブクラスを宣言するための "標準的な練習"がないのは、C++で見られる典型的なクラスの構文言語サポートがJavaScriptに実際に組み込まれていないからです。代わりに、それはあなたが同様の機能をどのように生成するかについて、それ自身のトリックの袋を持っています、そして、それらのトリックを表現するための多くの異なった方法があります。実際には標準的な方法はありません。
もっと一般的なjavascriptライブラリ(jQuery、Prototype、YUI、Closureなど)を使用し、サブクラス化のために提供する関数を使用して、独自の "標準"それをやる方法。ライブラリの1つを使用したくない場合は、サブクラス化(YUIのextend()関数に相当)をどこかから借りて、使用するスタイルを決定する必要があります。
大規模なプロジェクトではJavascriptの弱点、それに複数の人が働いているプロジェクト、またはクラスやサブクラスを宣言するための言語構文がないということを個人的には考えています。代わりに、一貫したコードベースを持つ唯一の方法は、あなたが使用する宣言のスタイルを自分で決めてから、プロジェクトのコーディング標準としてそれを強制することです。これは、ブレーススタイルやインデントスタイル。
私はStoyan StefanovのJavaScript Patternsをお読みになることをお勧めします。彼はこのトピックについて詳しく説明します。
個人的には、私はむしろModule Patternが好きです。地球規模の宇宙汚染を減らし、使い易い。
編集:自分の "クラス" をインスタンス化する際に
他の回答new
キーワードを除外しています。 JavaScriptの「クラス」のインスタンスを正しく生成する方法については、Answer 383503を参照してください。
他のポスターとは、あなたの説明のための「標準的な練習」ではありません。ダグラス・クロフォードが彼の本のThe Good Partsで使っているものに似ている、私が今使っていることを分かち合いましょう。私はそれが完璧だと主張しているわけではありませんが、私はこの質問で長い間不満を抱いていました。私はJSコードをOOPの仕方で整理しようとしています。
var ParentClass = function() {
var my = {}, // store private member variables and functions
that = {}; // store public member variables and functions
my.privateVar = 0;
that.publicVar = 7;
// this won't be visible outside of parent class,
// even to children unfortunately
my.getPrivateVar = function() {
return my.privateVar;
};
my.privateFunction = function() {
// do stuff
};
// this will be visible to children classes and anyone
// else using ParentClass
that.parentFunction = function() {
// here we can access private vars and functions
my.privateVar++;
my.privateFunction();
};
// and here we return the object that we created
// to store the public member variables and functions
return that;
};
var ChildClass = function() {
var my = {}, // more private vars and functions will live here
that = ParentClass(); // and here we subclass ParentClass;
// here define more public, private methods as before
that.childFunction = function() {
};
return that;
};
// test drive it
var cc = ChildClass();
cc.parentFunction();
cc.childFunction();
console.debug(cc.publicVar);
// console.debug(cc.privateVar); // undefined
- 1. 子クラスを関連する子クラスで使用する親クラスのプロパティとして宣言するにはどうすればよいですか?
- 2. どのようにクラスをJavascriptで宣言しますか?
- 3. クラスをクラス内で宣言して後で定義するにはどうすればいいですか?
- 4. 親クラスと子クラスのメソッドを宣言して一緒に実行する
- 5. サブクラスで宣言せずにコンストラクタを使用できるように、コンストラクタを基底クラスで宣言するにはどうすればよいですか?
- 6. 前方宣言されたテンプレートの基本クラスから派生したクラスを宣言するにはどうすればよいですか?
- 7. クラス内で静的関数を宣言するにはどうすればよいですか?
- 8. クラス内で構造体を宣言するにはどうすればよいですか?
- 9. Powershell 5クラスで静的メンバーを宣言するにはどうすればよいですか?
- 10. 子クラスが親クラスの静的インスタンスメンバーを宣言するのはいつ、そしてなぜですか?
- 11. クラスをインラインでどのように宣言しますか?
- 12. WPFでプライベート内部クラスからリソースを宣言するにはどうすればいいですか?
- 13. どのようにtypedefされたクラスを宣言するのですか?
- 14. javascriptで非表示のdivクラスとimageクラスをターゲティングするにはどうすればよいですか?
- 15. クラス内でボタンイベントを宣言するにはどうすればいいですか?
- 16. 別のHeaderFileクラスからKeyEventArgsを宣言するにはどうすればいいですか?
- 17. クラス内に仮想クラス宣言を入れることは可能ですか?
- 18. Classクラスは宣言されています/それを宣言する方法はどこですか?
- 19. クラス識別子がクラス宣言内で使用されています。それは良い練習ですか?
- 20. クラスをC++で宣言する前に、そのクラスを使用するにはどうすればよいですか?
- 21. 関数宣言でC++のmem_fn(member_function)を宣言するにはどうすればよいですか?
- 22. PHPで宣言されたクラス宣言を含むクラス宣言PHPコードスニファ
- 23. 子クラスで共有される親クラスにオブジェクトを作成するにはどうすればよいですか?
- 24. クラスはどのようにセットアップすればよいですか?
- 25. C#親クラスと子クラス - 親クラスから子を選ぶ
- 26. クラスと同じデータ型のクラスで、どのようにして静的メンバーを宣言できますか?
- 27. サブクラスで親クラスの保護されたメソッドを使用するにはどうすればよいですか?
- 28. 2次元配列をjavascriptで宣言するにはどうすればよいですか?
- 29. メソッドをチェーンできるようにC#でクラスを宣言するにはどうすればよいですか?
- 30. 親クラスと子クラスの静的コンストラクタはどのような順序で呼び出されますか?
標準的なプラクティスは、javascriptにはクラスがないことです。 – kennebec