new演算子と構造関数
11624 ワード
📢 22/03/13復習
📚 Reference
javascript.info, https://ko.javascript.info/constructor-new
注意:これは個人がサイトで復習しやすいように再編成された文章です.
詳細については、リファレンスサイトにアクセスしてください.
緒論
オブジェクトテキスト
💥
コンストラクタ
コンストラクション関数(constructor function)は、従来の関数と技術的に区別されない.ただし、コンストラクション関数は、次の2つの慣例に従います.
📌 関数名の最初の文字は大文字で始まります.
📌
🕐 空のオブジェクトを作成し、
🕑 関数の本文を実行します.
🕒
🕓 は、
ジェネレータの意味はここにある.再利用可能なオブジェクト生成コードを実現します.
💥 すべての関数が構造関数であることを忘れないでください.
🔥 new function() { ... }
繰り返し使用する必要のない複雑なオブジェクトを作成する必要があると仮定します.大量のコードが必要です.この場合、コードを匿名コンストラクション関数にカプセル化するには、次の方法を使用します.
ジェネレータと戻り文
コンストラクション関数には、通常、
しかし、
📌 オブジェクトが
📌 オリジナルが
オブジェクトが
次の例では、
🔥 かっこを省略
パラメータを持たないコンストラクション関数は、カッコを省略して呼び出すことができます.
ジェネレータのメソッド
コンストラクション関数を使用すると、パラメータを使用してオブジェクト内で自由に構成できます.柔軟性が大きい.
これまで、
次の例では、
📚 Reference
javascript.info, https://ko.javascript.info/constructor-new
注意:これは個人がサイトで復習しやすいように再編成された文章です.
詳細については、リファレンスサイトにアクセスしてください.
緒論
オブジェクトテキスト
{...}
を使用すると、簡単にオブジェクトを作成できます.しかし、開発中に類似のオブジェクトを複数作成する必要があることがよくあります.複数のユーザーメニューの様々なアイテムをオブジェクトで表現したい💥
new
演算子とコンストラクション関数を使用すると、複数の類似オブジェクトを簡単に作成できます.コンストラクタ
コンストラクション関数(constructor function)は、従来の関数と技術的に区別されない.ただし、コンストラクション関数は、次の2つの慣例に従います.
📌 関数名の最初の文字は大文字で始まります.
📌
new
演算子を使用する必要があります.function User(name) {
this.name = name;
this.isAdmin = false;
}
let user = new User("보라");
alert(user.name); // 보라
alert(user.isAdmin); // false
new User(...)
を使用して関数を実行する場合は、次のアルゴリズムが有効です.🕐 空のオブジェクトを作成し、
this
に割り当てます.🕑 関数の本文を実行します.
🕒
this
に新しいpropertyを追加して、this
を修正します.🕓 は、
this
を返します.function User(name) {
// this = {}; (빈 객체가 암시적으로 만들어짐)
// 새로운 프로퍼티를 this에 추가함
this.name = name;
this.isAdmin = false;
// return this; (this가 암시적으로 반환됨)
}
現在、let user = new User("보라")
の動作は、以下に入力するコードと同じである.let user = {
name: "보라",
isAdmin: false
};
new User("보라")
に加えて、new User("호진")
およびnew User("지민")
は、ユーザオブジェクトを簡単に作成することもできる.オブジェクトのテキスト構文を使用してオブジェクトを作成するよりも、オブジェクトを作成する方が簡単で読みやすいようになります.ジェネレータの意味はここにある.再利用可能なオブジェクト生成コードを実現します.
💥 すべての関数が構造関数であることを忘れないでください.
new
を使用して実行される場合、上記の任意の関数は、上記のアルゴリズムを実行する.「大文字」という名前の関数はnew
を使用して実行する必要があります.共通の約束だから.🔥 new function() { ... }
繰り返し使用する必要のない複雑なオブジェクトを作成する必要があると仮定します.大量のコードが必要です.この場合、コードを匿名コンストラクション関数にカプセル化するには、次の方法を使用します.
let user = new function() {
this.name = "John";
this.isAdmin = false;
// 사용자 객체를 만들기 위한 여러 코드.
// 지역 변수, 복잡한 로직, 구문 등의
// 다양한 코드가 여기에 들어갑니다.
};
以上のコンストラクション関数は匿名の関数であるため、どこにも保存されません.1回目の作成時から1回しか呼び出されないため、再利用できません.これにより,匿名構造関数は再利用を阻止しながらコードをカプセル化することができる.ジェネレータと戻り文
コンストラクション関数には、通常、
return
文はありません.返さなければならないものはすべてthis
に格納され、this
は自動的に返されるので、返される文を明示的に記入する必要はありません.しかし、
return
ゲートがあれば、何が起こるのでしょうか.次の簡単なルールが適用されます.📌 オブジェクトが
return
の場合、返されるオブジェクトはthis
の代わりになります.📌 オリジナルが
return
の場合、return
ゲートは無視されます.オブジェクトが
return
の後にある場合、コンストラクション関数はオブジェクトを返し、そうでない場合はthis
を返します.次の例では、
return
がthis
を無視してオブジェクトに戻る第1のルールが適用されます.function BigUser() {
this.name = "원숭이";
return { name: "고릴라" }; // <-- this가 아닌 새로운 객체를 반환함
}
alert( new BigUser().name ); // 고릴라
何もしないreturn
の例を見てみましょう.2番目のルールは、元のタイプを返すときと同じように適用されます.function SmallUser() {
this.name = "원숭이";
return; // <-- this를 반환함
}
alert( new SmallUser().name ); // 원숭이
return
文を含むコンストラクション関数はほとんどありません.🔥 かっこを省略
パラメータを持たないコンストラクション関数は、カッコを省略して呼び出すことができます.
let user = new User; // <-- 괄호가 없음
// 아래 코드는 위 코드와 똑같이 동작합니다.
let user = new User();
リストにはカッコを省略できますが、「良いスタイル」ではありません.ジェネレータのメソッド
コンストラクション関数を使用すると、パラメータを使用してオブジェクト内で自由に構成できます.柔軟性が大きい.
これまで、
this
にpropertyを追加した例だけを見てきましたが、方法を追加することもできます.次の例では、
new User(name)
は、Property name
およびメソッドsayHi
を有するオブジェクトを作成する.function User(name) {
this.name = name;
this.sayHi = function() {
alert( "제 이름은 " + this.name + "입니다." );
};
}
let bora = new User("이보라");
bora.sayHi(); // 내 이름은 이보라입니다.
/*
bora = {
name: "이보라",
sayHi: function() { ... }
}
*/
class
構文を使用すると、コンストラクション関数を使用するのと同じように複雑なオブジェクトを作成できます.Reference
この問題について(new演算子と構造関数), 我々は、より多くの情報をここで見つけました https://velog.io/@gusdnr814/new-연산자와-생성자-함수テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol