JAvascript basics#5ジェネレータ、演算子new

8032 ワード

JAvascript basics#5ジェネレータ、演算子new
https://javascript.info/.
類似オブジェクトを多数作成する必要がある場合は、コンストラクション関数"new"演算子を使用します.

コンストラクタ


技術的には一般的な関数ですが、2つの程度の制限があります.
  • 大文字で始まる
  • "new"演算子によって実行される必要があります.
  • function Person(name) {
      this.name = name;
      this.isGenius = false;
    }
    
    let person = new Person("Jake");
    
    alert(user.name);
    alert(user.isGenius);
    上記の関数がキーワードnewとともに実行されると、次の手順が実行されます.
  • 新しい空のオブジェクトを作成し、thisに割り当てます.
  • 関数の本体が実行され、thisに新しいpropertyが追加されます.
  • this|が返されます.
  • コードで表現すると、次のことが起こります.
    function Person(name) {
      // this = {}; (암묵적으로)
      
      this.name = name;
      this.isGenius = false;
      
      // return this; (암묵적으로)
    }
    したがってlet person = new Person("Jake")は、次のコードの結果と同じです.
    let person = {
      name: "Jake",
      isGenius: false
    }
    他のPersonnew Person("Other's Name")を追加したい場合は.この方法は毎回文字を使うよりずっと簡単で、読みやすいです.
    注意しなければならないのは、どの関数もnewキーワードと一緒に使用できるので、「大文字」のような会議を確保したほうがいいことです.

    構造関数の即時割り当てと使用


    オブジェクトを作成するために複数行のコードが必要な場合は、次のようにコンストラクション関数にバインドできます.
    let user = new function() {
      this.name = "Jake";
      this.isGenius = false;
    }
    上のジェネレータはどこにも格納されていないため、再呼び出すことはできません.したがって、この方法の目的は、オブジェクトが使用されなくなったときにカプセル化することです.

    テスト作成モード:new。target


    この文法はあまり使わないので、このままでいいです.
    関数内では、newpropertyを使用して、キーワード呼び出しnew.targetpropertyを使用するかどうかを決定できます.
    一般的な関数の結果はnew.targetが空ですが、newが呼び出されると、関数自体が表示されます.

    以上のようにnew.target使用可能:

    ライブラリなどで使用して、コードをより柔軟にすることもできます.ライブラリユーザがうっかりnewキーワードを漏らしても、オブジェクトはよく生成されます.

    ジェネレータから戻る


    通常、ジェネレータはreturnキーワードを使用しません.thisでいくつかのことをします.thisは戻ります.
    returnキーワードが使用可能な場合、ルールは次のとおりです.
  • オブジェクトがreturnの場合、thisではなくオブジェクトが返されます.
  • 原語がreturnの場合は無視します.


  • 上記2つのコンストラクタがある場合、
    結果は以下の通りです.

    オブジェクトを返すコンストラクタはnew演算子を使用して既存の作成オブジェクトを返し、原語を返すコンストラクタはnew演算子を使用してthisをよく返します.

    newキージェネレータ関数のカッコをスキップ


    コンストラクション関数でカッコを省略すると、配列として何も入力されていないのと同じ結果が得られます.

    コンストラクション関数のメソッド


    コンストラクション関数では、thisキーワードはPropertyにもメソッドにも使用できます.
    たとえば、次のソースコードは、namepropertyとwhoAmIメソッドを同時に持つオブジェクトを作成します.
    function Person(name) {
      this.name = name;
      
      this.whoAmI = function() {
        console.log(`my name is ${this.name}`);
      }
    }

    上記のように呼びます.これよりも高度な構文があります.classと呼ばれ、後述します.

    サマリ

  • コンストラクション関数はすべて通常の関数です.しかし、最初の最初の文字は大文字でなければならないという会議がありました.
  • コンストラクション関数は、常にキーワードnewとともに呼び出される必要があります.newキーワードは、空のthisにpropertyとメソッドを加えて返すことを示す.