JavaScript について私が気に入らないことの 1 つは、何百もの方法があることです。私が知りたいのは、クラスを宣言する方法です。function() アプローチを使用しますか? Class.create() を呼び出す必要がありますか? 「標準的な慣行」とは何ですか?メンバー関数を宣言する「標準的な方法」とは何ですか? プロトタイプを使用しますか? myClass.method() を使用しますか? 最後に、基本的な親子継承を行うにはどうすればよいですか? 私が質問している理由は、インターネット上でこれらのことを行う多くの方法を受け取ったからです. 「標準的な慣行」とは何か知りたいです。
3 に答える
Stoyan Stefanov によるJavaScript パターンを読むことをお勧めします。彼はこのトピックについて詳しく説明しています。
個人的にはModule Patternの方が好きです。地球規模の宇宙汚染を軽減し、使いやすいです。
編集:
他の答えはnew
、「クラス」をインスタンス化するときにキーワードを省略しています。JavaScript の「クラス」を適切にインスタンス化する方法については、回答383503を参照してください。
Javascript でクラス、特にサブクラスを宣言するための「標準的な慣行」がない理由は、Javascript には、C++ で見られる典型的なクラスの構文言語サポートが実際には組み込まれていないためです。代わりに、同様の機能を生成するための独自のトリックがあり、それらのトリックを表現するさまざまな方法があります。本当に標準的な方法はありません。
より一般的な JavaScript ライブラリ (jQuery、Prototype、YUI、Closure など) の 1 つを使用し、それらが提供するサブクラス化用の関数を使用して、独自の「標準的な」方法を提供するのが最善だと思います。それ。ライブラリのいずれかを使用したくない場合は、サブクラス化 (YUI の extends() 関数に相当) 用のコードをどこかから借りて、使用するスタイルを決定する必要があります。
個人的には、大規模なプロジェクト、複数の人が作業しているプロジェクト、または他の人によって拡張されることを意図したプロジェクトで、クラスとサブクラスを宣言する「方法」の言語構文がないことが Javascript の弱点だと思います。代わりに、一貫したコードベースを持つ唯一の方法は、使用する宣言のスタイルを独自に決定し、それをプロジェクトのコーディング標準として適用することです。スタイル。
あなたの説明に対する「標準的な慣行」がないという点で、他のポスターに間違いなく同意します。Douglas Crawford が彼の著書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