constructor function
6698 ワード
関数式プログラミングに没頭していましたが、オブジェクト向けプログラミングにも興味を持ち、いつかJavaを試してみようと思って探してみました.
英語から何かを生成する関数であることがわかります
一般的には、複数の類似オブジェクトを生成するために使用される関数です.
コンストラクション関数には、関数の頭文字を大文字にする規則があります.
その後、この関数内で
二つの状況に分けられる.オブジェクトを返すと、 オリジナルを返すと、暗黙的に
new演算子と構造関数
constructor function
英語から何かを生成する関数であることがわかります
一般的には、複数の類似オブジェクトを生成するために使用される関数です.
function User(name) {
this.name = name;
this.isAdmin = false;
}
let user = new User("보라");
alert(user.name); // 보라
alert(user.isAdmin); // false
return
はありませんが、どのようにして値を生成しますか?コンストラクション関数には、関数の頭文字を大文字にする規則があります.
その後、この関数内で
this = {}
というオブジェクトが暗黙的に生成され、最後にreturn this
という戻り文が暗黙的に生成される.function User(name) {
// this = {}; (빈 객체가 암시적으로 만들어짐)
// 새로운 프로퍼티를 this에 추가함
this.name = name;
this.isAdmin = false;
// return this; (this가 암시적으로 반환됨)
}
では、return
をコンストラクション関数に書き込むとどうなるのでしょうか.二つの状況に分けられる.
return this
は暗黙的に作成されません.function BigUser() {
this.name = "원숭이";
return { name: "고릴라" }; // <-- this가 아닌 새로운 객체를 반환함
}
alert( new BigUser().name ); // 고릴라
return this
が生成されるfunction SmallUser() {
this.name = "원숭이";
return; // <-- this를 반환함
}
alert( new SmallUser().name ); // 원숭이
📌 new.target
コンストラクション関数が呼び出されたかどうかを決定するnew operator
function User() {
alert(new.target);
}
// 'new' 없이 호출함
User(); // undefined
// 'new'를 붙여 호출함
new User(); // function User { ... }
ES 6で作成されたclassのため、コンストラクション関数は使用されません.*References
Reference
この問題について(constructor function), 我々は、より多くの情報をここで見つけました https://velog.io/@ayaan92/constructor-functionテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol