JavaScript/new
表示
new
キーワードは、JavaScriptでオブジェクトのインスタンスを生成するために使用される重要な演算子です。コンストラクタ関数を呼び出し、新しいオブジェクトを作成します。
主な機能
[編集]new
キーワードを使用すると、以下のプロセスが実行されます:
- 新しい空のオブジェクトを作成
- コンストラクタ関数の
this
を新しいオブジェクトにバインド - コンストラクタ関数を実行
- 生成されたオブジェクトを返却(明示的に別のオブジェクトを返さない場合)
基本的な使用例
[編集]// コンストラクタ関数の定義 function Person(name, age) { this.name = name; this.age = age; } // newを使用してインスタンス作成 let john = new Person('John Doe', 30);
詳細な動作メカニズム
[編集]new
キーワードを使用すると、以下のステップが内部的に実行されます:
function newOperator(Constructor, ...args) { // 1. 新しいオブジェクトを作成 const obj = {}; // 2. プロトタイプをセット Object.setPrototypeOf(obj, Constructor.prototype); // 3. コンストラクタを実行し、thisをバインド const result = Constructor.apply(obj, args); // 4. 結果を返却 return (result && typeof result === 'object') ? result : obj; }
注意点と制限
[編集]アロー関数との非互換性
[編集]アロー関数はコンストラクタとして使用できません:
// エラーになります const Person = (name) => { this.name = name; // 期待通りに動作しない };
プリミティブ値の扱い
[編集]プリミティブ値を返すコンストラクタは、オブジェクトを返します:
function StringWrapper(value) { return value; // プリミティブ値を返そうとしても } let str = new StringWrapper('Hello'); // オブジェクトが返される
高度な使用例
[編集]デフォルト値の実装
[編集]class User { constructor(name = '匿名', age = 0) { this.name = name; this.age = age; } } let defaultUser = new User(); // デフォルト値が使用される
プライベートフィールドとの併用
[編集]class BankAccount { #balance; // プライベートフィールド constructor(initialBalance = 0) { this.#balance = initialBalance; } getBalance() { return this.#balance; } } let account = new BankAccount(1000);
関連概念
[編集]- コンストラクタ関数
- プロトタイプ継承
this
キーワード- クラス