2

JavaScript について私が気に入らないことの 1 つは、何百もの方法があることです。私が知りたいのは、クラスを宣言する方法です。function() アプローチを使用しますか? Class.create() を呼び出す必要がありますか? 「標準的な慣行」とは何ですか?メンバー関数を宣言する「標準的な方法」とは何ですか? プロトタイプを使用しますか? myClass.method() を使用しますか? 最後に、基本的な親子継承を行うにはどうすればよいですか? 私が質問している理由は、インターネット上でこれらのことを行う多くの方法を受け取ったからです. 「標準的な慣行」とは何か知りたいです。

4

3 に答える 3

1

Stoyan Stefanov によるJavaScript パターンを読むことをお勧めします。彼はこのトピックについて詳しく説明しています。

個人的にはModule Patternの方が好きです。地球規模の宇宙汚染を軽減し、使いやすいです。

編集:

他の答えはnew、「クラス」をインスタンス化するときにキーワードを省略しています。JavaScript の「クラス」を適切にインスタンス化する方法については、回答383503を参照してください。

于 2011-07-09T04:01:53.387 に答える
1

Javascript でクラス、特にサブクラスを宣言するための「標準的な慣行」がない理由は、Javascript には、C++ で見られる典型的なクラスの構文言語サポートが実際には組み込まれていないためです。代わりに、同様の機能を生成するための独自のトリックがあり、それらのトリックを表現するさまざまな方法があります。本当に標準的な方法はありません。

より一般的な JavaScript ライブラリ (jQuery、Prototype、YUI、Closure など) の 1 つを使用し、それらが提供するサブクラス化用の関数を使用して、独自の「標準的な」方法を提供するのが最善だと思います。それ。ライブラリのいずれかを使用したくない場合は、サブクラス化 (YUI の extends() 関数に相当) 用のコードをどこかから借りて、使用するスタイルを決定する必要があります。

個人的には、大規模なプロジェクト、複数の人が作業しているプロジェクト、または他の人によって拡張されることを意図したプロジェクトで、クラスとサブクラスを宣言する「方法」の言語構文がないことが Javascript の弱点だと思います。代わりに、一貫したコードベースを持つ唯一の方法は、使用する宣言のスタイルを独自に決定し、それをプロジェクトのコーディング標準として適用することです。スタイル。

于 2011-07-09T04:02:06.540 に答える
1

あなたの説明に対する「標準的な慣行」がないという点で、他のポスターに間違いなく同意します。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
于 2011-07-09T04:58:56.533 に答える