私は以下のようなパターンを好みます。これは、次の 4 段階のアプローチと考えることができます。
(function(parent) {
// 1. Declare private variables and functions that will be
// accessible by everybody within the scope of this
// function, but not outside of it.
var doSomethingAwesome = function() { .. }; // private function
var coolInteger = 42; // private variable
// 2. Create the constructor function
function ISGrader() {
..
}
// 3. Create shared public methods on the prototype object.
// These will be created only once, and shared between all objects
// which is more efficient that re-creating each method for each object.
ISGrader.prototype.printInfo = function() { .. };
ISGrader.prototype.putGrade = function(score) { .. };
// 4. Expose the constructor to the outside world.
parent.ISGrader = ISGrader;
})(window);
すべてが自己実行型の無名関数内に含まれている理由は、内部で作成したプライベート変数が外側のスコープに漏れないようにするためであり、基本的に物事をクリーンに保つためです。
このようにコンストラクターを宣言するもう 1 つの利点は、単語を 1 つ変更するだけで、親オブジェクトを簡単にwindow
別の名前空間オブジェクトに変更できることです。