私の同僚は、JavaScriptで新しいオブジェクトを定義するために、小文字の「f」を使用して「new function()」を使用しています。すべての主要なブラウザでうまく機能しているようで、プライベート変数を隠すのにもかなり効果があるようです。次に例を示します。
var someObj = new function () {
var inner = 'some value';
this.foo = 'blah';
this.get_inner = function () {
return inner;
};
this.set_inner = function (s) {
inner = s;
};
};
「this」が使用されるとすぐに、someObjのパブリックプロパティになります。そのため、someObj.foo、someObj.get_inner()、someObj.set_inner()はすべて公開されています。さらに、set_inner()とget_inner()は特権メソッドであるため、クロージャーを介して「内部」にアクセスできます。
ただし、この手法への言及はどこにもありません。Douglas CrockfordのJSLintでさえ不満があります。
- 奇妙な建設。「新規」を削除
この手法は本番環境で使用しており、うまく機能しているようですが、ドキュメント化されていないため、少し心配です。これが有効な手法であるかどうか誰かが知っていますか?
this
がある場合、オブジェクトではなくイベントを発生させた要素を参照しますが、var instance = this
代わりに使用できます。