コンストラクション関数によるオブジェクトの作成
9884 ワード
コンストラクション関数は、new演算子とともに呼び出されてオブジェクトを生成する関数です.コンストラクション関数によって生成されるオブジェクトをインスタンスと呼びます.
Objectジェネレータ関数のほか、JavaScriptにはString、Number、Boolean、Function、Array、Date、RegExp、Promiseなどのビルダー関数が用意されています.
空のオブジェクトを生成し、 に戻る.
直感的、簡便 オブジェクトを1つだけ作成する=>同じプロセスの複数のオブジェクトを作成する必要がある場合、効率が低下します.
同じエンティティ構造を持つ複数のオブジェクト を簡単に作成できます.
定義はの一般関数と同じで、new演算子呼び出しを使用します.
インスタンスを作成してバインドする
デフォルトでは、空のオブジェクトが作成され、このオブジェクトにバインドされます.したがって、コンストラクション関数内部のthisは、コンストラクション関数に新しいインスタンスが現れることを意味します.
この処理は、実行時より前に実行されます.
インスタンスの初期化
このインスタンスにバインドされたpropertyまたはメソッドを追加し、パラメータとして渡された初期値をインスタンスpropertyに割り当てます.
インスタンスを返す
インスタンスバインドが完了したthisはデフォルトで返されます.
非thisオブジェクトを明示的に返すと、この戻りは無視され、戻り文で指定したオブジェクトが返されます.
コンストラクション関数の内部でthis以外の値を明示的に返すと、コンストラクション関数の基本的な動作が破壊されます.したがって、コンストラクション関数の内部ではreturn文を省略する必要があります.
関数もオブジェクトであるため、通常のオブジェクトの内部スロットを有し、内部メソッド を有する.は、「環境」、「FormalParameters」など、関数オブジェクトにのみ使用される他の内部スロット、および「コール」および「構成」などの他の内部メソッドです. 一般関数 を呼び出す.
呼び出し[Construct]=>コンストラクション関数 すべての関数は呼び出すことができるため、「コール」がありますが、「構成」はコンストラクション関数でなければなりません.
JavaScriptエンジンは、関数オブジェクト作成時の関数定義に基づいて に分割する.コンストラクション関数:関数宣言、関数式、クラス 非構造関数:メソッド(ES 6メソッド略)、矢印関数
新しい演算子を使用することなく、 コンストラクタの呼び出しを防止する. コンストラクタ内部で使用するデフォルト領域変数 関数で=>new演算子とコンストラクション関数を使用して を呼び出す.
ただし、new演算子を使用せずにString、Number、Booleanコンストラクション関数を呼び出すと、オブジェクトではなく文字列、数値、ブール値が返されます.データ型を変換することもできます.
Objectジェネレータ関数のほか、JavaScriptにはString、Number、Boolean、Function、Array、Date、RegExp、Promiseなどのビルダー関数が用意されています.
オブジェクトジェネレータ関数
new Object()
コンストラクタ
オブジェクトテキストからオブジェクトを作成するには
コンストラクション関数によるオブジェクトの作成
定義は
インスタンス作成プロセス
インスタンスを作成してバインドする
デフォルトでは、空のオブジェクトが作成され、このオブジェクトにバインドされます.したがって、コンストラクション関数内部のthisは、コンストラクション関数に新しいインスタンスが現れることを意味します.
この処理は、実行時より前に実行されます.
インスタンスの初期化
このインスタンスにバインドされたpropertyまたはメソッドを追加し、パラメータとして渡された初期値をインスタンスpropertyに割り当てます.
インスタンスを返す
インスタンスバインドが完了したthisはデフォルトで返されます.
非thisオブジェクトを明示的に返すと、この戻りは無視され、戻り文で指定したオブジェクトが返されます.
function Circle(radius) {
// 1. 인스턴스 생성과 this 바인딩
// 2. 인스턴스 초기화
this.radius = radius;
this.getDiameter = function() {
return 2 * this.radius;
};
// 3. 인스턴스 반환 => 암묵적으로 this 반환
return {}; // 다른 객체를 명시적으로 반환 => this 반환 무시
}
ただし、明示的に元の値を返すと、元の値は無視され、デフォルトではthisが返されます.コンストラクション関数の内部でthis以外の値を明示的に返すと、コンストラクション関数の基本的な動作が破壊されます.したがって、コンストラクション関数の内部ではreturn文を省略する必要があります.
内部メソッドと構成
呼び出し
コンストラクション関数と非コンストラクション関数の区別
// 아래와 같이 일반 함수로 정의된 함수만이 constructor
// 함수 선언문
function foo() {}
// 함수 표현식
const bar = function() {};
const baz = {
x: function() {} // x 값으로 할당된 것은 일반 함수로 정의된 함수 => 메소드 X
};
// non-constructor
// 화살표 함수
const arrow = () => {};
const obj = {
x() {} // ES6 메소드 축약 표현
};
new.target
新しい演算子
// 생성자 함수
function Circle(radius) {
// new와 함께 호출하지 않았다면 new.target 은 undefined
if (!new.target) {
// new 연산자와 함께 생성자 함수 재귀 호출하여 반환
return new Circle(radius);
}
this.radius = radius;
this.getDiameter = function() {
return 2 * this.radius;
};
}
ほとんどのコンストラクタ関数は、new演算子とともに呼び出されるかどうかを決定するために適切な値を返します.new演算子がなくても、new演算子とともに呼び出されたときの動作と同じです.ただし、new演算子を使用せずにString、Number、Booleanコンストラクション関数を呼び出すと、オブジェクトではなく文字列、数値、ブール値が返されます.データ型を変換することもできます.
const str = String(123);
console.log(str, typeof str); // 123 string
const num = Number('123');
console.log(num, typeof num); // 123 number
const bool = Boolean('true');
console.log(bool, typeof bool); // true boolean
Reference
この問題について(コンストラクション関数によるオブジェクトの作成), 我々は、より多くの情報をここで見つけました https://velog.io/@cheej10/생성자-함수에-의한-객체-생성テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol