私はオブジェクト コンストラクターを次のように書く傾向があります。
function Person(name) {
this.name = name;
}
Person.prototype.greet = function () {
alert("Hello! My name is " + this.name + ".");
};
いくつかの JavaScript ライブラリとフレームワークが、次のようにコードを追加していることに気付きました。
var Person = (function () {
function Person(name) {
this.name = name;
}
Person.prototype.greet = function () {
alert("Hello! My name is " + this.name + ".");
};
return Person;
})();
自己実行匿名関数が何を行い、何に使用されるかを知っています。現時点では、コンストラクターとそのプロトタイプを定義するときにこれがどのような利点または利点を提供するかはわかりません。
編集#1:
私はモジュール パターンとその利点を知っており、コーディングでかなり頻繁に使用しています。私のコミュニケーションにおける間違いは、私の最初のコード サンプルがグローバル スコープにあるはずがないことを明確にしていなかったことです。私は常に、すべての外部 JavaScript ファイルを自己実行型の匿名関数でラップして、コードにローカル スコープを適用します。
例えば:
;(function ( window, undefined ) {
var p = function (name) {
this.name;
};
p.prototype.greet = function () {
alert("Hello! My name is " + this.name + ".");
};
window.Person = window.Person || p;
})(window);
問題は、そのような無名関数内で使用されている 2 番目のコード サンプルに示されているテクニックを見たことです。
例えば:
;(function ( window, undefined ) {
var p = (function () {
var q = function (name) {
this.name = name;
};
q.prototype.greet = function () {
alert("Hello! My name is " + this.name + ".");
};
return q;
})();
window.Person = window.Person || p;
})(window);
ここで技の意義を腑に落ちない。