私が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. 親クラスの子クラスと同じプロパティを宣言する
- 3. どのようにクラスをJavascriptで宣言しますか?
- 4. クラスをクラス内で宣言して後で定義するにはどうすればいいですか?
- 5. 子クラスから親クラス変数を設定/変更するにはどうすればよいですか?
- 6. プライベート親クラスを内部クラスの親として使用するにはどうすればよいですか?
- 7. shared_ptrをある親クラスから別の親クラスにキャストするにはどうすればよいですか?
- 8. サブクラスで宣言せずにコンストラクタを使用できるように、コンストラクタを基底クラスで宣言するにはどうすればよいですか?
- 9. 親クラスと子クラスのメソッドを宣言して一緒に実行する
- 10. 前方宣言されたテンプレートの基本クラスから派生したクラスを宣言するにはどうすればよいですか?
- 11. TypeScript宣言ファイルで定義されたクラスを使用するにはどうすればよいですか?
- 12. メンバーテンプレートクラスを囲むクラスの友人と宣言するにはどうすればよいですか?
- 13. Powershell 5クラスで静的メンバーを宣言するにはどうすればよいですか?
- 14. クラス内で静的関数を宣言するにはどうすればよいですか?
- 15. メソッドで宣言クラスを取得するにはどうすればよいですか?
- 16. クラス内でtypeScriptの関数を宣言するにはどうすればよいですか?
- 17. クラス宣言の外で明示的なオーバーライドを実装するにはどうすればよいですか?
- 18. クラス内で構造体を宣言するにはどうすればよいですか?
- 19. クラスをインラインでどのように宣言しますか?
- 20. 子コントローラクラスでモデルを読み込み、親クラスで使用するにはどうすればよいですか?
- 21. クラスの前方宣言とクラスの宣言の違いは何ですか?
- 22. 子クラスが親クラスの静的インスタンスメンバーを宣言するのはいつ、そしてなぜですか?
- 23. WPFでプライベート内部クラスからリソースを宣言するにはどうすればいいですか?
- 24. JavaScriptでクラスを作成するにはどうすればよいですか?
- 25. クラス外の特殊化テンプレートメソッドを宣言するにはどうすればよいですか?
- 26. 同じクラスのメンバーベクトルを宣言するにはどうすればよいですか?
- 27. 同じクラスのメンバへの参照を宣言するにはどうすればよいですか?
- 28. どのようにtypedefされたクラスを宣言するのですか?
- 29. javascriptで非表示のdivクラスとimageクラスをターゲティングするにはどうすればよいですか?
- 30. クラス内でImageViewを宣言するにはどうすればいいですか?
標準的なプラクティスは、javascriptにはクラスがないことです。 – kennebec