[解決済み] コンストラクタ関数とファクトリ関数の比較
2022-04-21 06:54:35
質問
Javascriptのコンストラクタ関数とファクトリ関数の違いを明確にすることができますか?
どのような場合にどちらかを使うのでしょうか?
どのように解決するのですか?
基本的な違いは、コンストラクタ関数に
new
キーワード(JavaScript が自動的に新しいオブジェクトを作成し、そのオブジェクトに
this
関数内でそのオブジェクトを指定し、そのオブジェクトを返します)。
var objFromConstructor = new ConstructorFunction();
ファクトリー関数は、通常の関数と同じように呼び出されます。
var objFromFactory = factoryFunction();
しかし、これをファクトリーと呼ぶには、何らかのオブジェクトの新しいインスタンスを返す必要があります。のように自動的に行われるわけではありません。
new
しかし、いくつかのケースでは、より柔軟な対応が可能になります。
本当に簡単な例では、上記の関数は次のようになります。
function ConstructorFunction() {
this.someProp1 = "1";
this.someProp2 = "2";
}
ConstructorFunction.prototype.someMethod = function() { /* whatever */ };
function factoryFunction() {
var obj = {
someProp1 : "1",
someProp2 : "2",
someMethod: function() { /* whatever */ }
};
// other code to manipulate obj in some way here
return obj;
}
もちろん、この単純な例よりもはるかに複雑なファクトリー関数を作ることができます。
ファクトリー関数の利点は、返されるオブジェクトが何らかのパラメータによって複数の異なる型になる可能性がある場合です。
関連
-
Vueはランニングライト形式のテキストを水平方向にスクロールする機能を実装している
-
Vueのフォームイベントのデータバインディングの説明
-
[解決済み】ExpressJS - throw er Unhandled errorイベント
-
[解決済み】React Uncaught Error: 対象コンテナが DOM 要素でない [重複]。
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] staticmethodとclassmethodの違いについて
-
[解決済み] callとapplyの違いは何ですか?
-
[解決済み] event.preventDefault() vs. return false
-
[解決済み】別のウェブページにリダイレクトするにはどうすればいいですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
vueが定義するプライベートフィルタと基本的な使い方
-
Vueのフィルタの説明
-
[解決済み】JavaScriptの配列でforEachが関数でない不具合
-
[解決済み】TypeError: Router.use() はミドルウェアの関数を要求しているが、Object を取得した。
-
[解決済み】JavaScript TypeError: null のプロパティ 'style' を読み取ることができない
-
[解決済み] TypeError: $.ajax(...) is not a function?
-
[解決済み】ERROR エラーです。スイッチのname属性が指定されていないフォームコントロールの値アクセッサがない
-
[解決済み】 Uncaught TypeError : undefined のプロパティ 'replace' を読み取れない In Grid
-
nodejs unhandledPromiseRejectionWarning メッセージ
-
JavaScriptのStringに関する共通メソッド