OOP


まずエンクロージャを見てみましょう.次の文章はもっと分かりやすいです.
TDDでは、以下の方法がよく用いられる.
モジュールモード
function Person() {
  let age = 35;

  return {
    getAge: () => {
      return age;
    },
    setAge: (data) => {
      age = data;
    },
  };
}
ageはキャビネットスペースにあり、内側に折りたたむしかありませんが、中にはアクセスできます.getAgeとsetAgeを使用してageにアクセスしています.(モジュール)
値段を隠すのに使います.
カスタムタイプアレイ
function PersonType() {
  this.age = 35;
}

PersonType.prototype.getAge = function () {
  return this.age + 1;
};

const instancePerson = new PersonType();
//this.age에 접근이 가능하다. (은닉되지 않음)
console.log(instancePerson.age);
console.log(instancePerson.getAge());

//이렇게 하는것과 사용자 정의 타입 패턴은 어떤 차이가 있을까?
//사용자 정의 타입 패턴은 재사용이 가능하다. (메모리 효율적)
// const instancePerson1 = new PersonType();
// const instancePerson2 = new PersonType();
// const instancePerson3 = new PersonType();
let person2 = { age: 35 };
console.log(person2.age);
インスタンスの作成に使用する関数.newキーワードを使用して、コンストラクション関数の関数またはprototypeとして宣言された関数を宣言します.これにより、関数を構築するために使用されるthisはインスタンスを指します.値段は隠さない.
モジュール+カスタムモード
function PersonType2() {
  let age = 25;

  function innerPersonType() {}

  innerPersonType.prototype.getAge = function () {
    return age;
  };

  return innerPersonType;
}

const Person3 = PersonType2();
const person3 = new Person3();
console.log(person3.getAge());
innerPersonType関数は、ageに近づくことができるCloser関数である.ダイヤルバックinnerPersonTypeは、上記のように使用できます.
メモリを有効に使用し、値を非表示にすることができます.
// IIFE 패턴으로 만들어보기
const PersonType3 = (function () {
  let age = 25;

  function innerPersonType() {}

  innerPersonType.prototype.getAge = function () {
    return age;
  };

  return innerPersonType;
})();

const personType3 = new PersonType3();
console.log(personType3.getAge());
インスタント実行関数にすることもできます.