[解決済み] JavaScriptで小文字の "f "を使った`new function()`のテスト
2022-10-26 04:10:09
質問
私の同僚は、JavaScript で新しいオブジェクトを定義するために、小文字の "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()は特権メソッドなので、クロージャを通じて"inner"にアクセスすることができます。
しかし、このテクニックへの言及はどこにも見当たりません。 Douglas CrockfordのJSLintでさえも、それに文句を言っています。
- 奇妙な構造。新しい」を削除してください。
このテクニックを本番で使っていて、うまくいっているようなのですが、どこにも文書化されていないので、ちょっと不安です。 どなたか、これが有効なテクニックかどうかご存じですか?
どのように解決するのですか?
そのテクニックは以前にも見たことがあります。 コンストラクタ関数 .
しかし、IMHOでは、自動起動する関数式で同じことが実現できます。
new
演算子を使う意味はないと思います。
var someObj = (function () {
var instance = {},
inner = 'some value';
instance.foo = 'blah';
instance.get_inner = function () {
return inner;
};
instance.set_inner = function (s) {
inner = s;
};
return instance;
})();
の目的は
new
演算子は新しいオブジェクトのインスタンスを作成することであり、そのために
[[Prototype]]
内部プロパティによって作られることがわかります。
[Construct]
という内部プロパティがあります。
上記のコードで同等の結果が得られます。
関連
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?
-
[解決済み] JavaScriptのオブジェクトにキーが存在するかどうかをチェックする?
-
[解決済み】JavaScriptの比較では、どちらの等号演算子(== vs ===)を使うべきですか?
-
[解決済み】JavaScriptの関数にデフォルトのパラメータ値を設定する
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
-
[解決済み] jQueryの$という記号の意味は何ですか?
-
[解決済み] Chromeの拡張機能開発にWebStormを使用するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] <Enter>でjQuery UIダイアログを送信する
-
[解決済み] なぜJavaScriptでは!{}[true]がtrueに評価されるのですか?
-
[解決済み] JavaScriptで:hoverのCSSプロパティを変更する
-
[解決済み] Javascript 空の配列の削減
-
[解決済み] AngularJS - ngRepeatフィルタリングされた結果の参照を取得する方法
-
[解決済み] 各オブジェクトに?重複
-
[解決済み] Promise : then vs then + catch [重複].
-
[解決済み] javascriptのキャンバスで画像をリサイズする (スムーズ)
-
[解決済み] リダイレクトされずにHTMLフォームを送信する方法
-
[解決済み] JavaScriptデータフォーマット/プリティプリンタ