ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Object Model
    개발/Javascript 2022. 6. 6. 20:09

    *복습 자료라서 뻔한 내용은 생략

     

     

    Summary.

     

     

    1. Object는 기본적으로 Reference

    // Two variables, a single object
    const fruit = {name: 'apple'};
    const fruitbear = fruit;  // Assign fruit object reference to fruitbear
    
    // Here fruit and fruitbear are pointing to same object
    fruit == fruitbear; // return true
    fruit === fruitbear; // return true
    
    fruit.name = 'grape';
    console.log(fruitbear); // output: { name: "grape" }, instead of { name: "apple" }

     

    2. getter, setter 설정 가능 (object initializer에서 하거나 Object.defineProperties()로 나중에 추가하거나)

    const o = {
      a: 7,
      get b() {
        return this.a + 1;
      },
      set c(x) {
        this.a = x / 2;
      }
    };
    
    console.log(o.a); // 7
    console.log(o.b); // 8 <-- At this point the get b() method is initiated.
    o.c = 50;         //   <-- At this point the set c(x) method is initiated
    console.log(o.a); // 25
    const o = { a: 0 };
    
    Object.defineProperties(o, {
         'b': { get: function() { return this.a + 1; } },
         'c': { set: function(x) { this.a = x / 2; } }
    });
    
    o.c = 10; // Runs the setter, which assigns 10 / 2 (5) to the 'a' property
    console.log(o.b); // Runs the getter, which yields a + 1 or 6

     

    3. this는 현재 Object를 가리킴. this.prop을 사용하는 함수를 Object에 추가하면 해당 Object의 prop을 참조

     

    4. method는 function type인 property. 아래처럼 다양한 정의방법이 있음

    objectName.methodName = functionName;
    
    const myObj = {
      myMethod: function(params) {
        // ...do something
      },
    
      // this works too!
      myOtherMethod(params) {
        // ...do something else
      }
    };

     

    5. Property 순회하는 방법은 3가지

        + for in

        + Object.keys(o)

        + Object.getOwnPropertyNames(o)

        + 모든 Prototype Chain에 있는 Property 순회하려면 다음과 같은 방법 뿐 (Native 방법은 없음)

    function listAllProperties(o) {
      let objectToInspect = o;
      let result = [];
    
      while(objectToInspect !== null) {
        result = result.concat(Object.getOwnPropertyNames(objectToInspect));
        objectToInspect = Object.getPrototypeOf(objectToInspect)
      }
    
      return result;
    }

     

    6. Object 생성하는 법 3가지

        + Object Initializer (Literal)

        + Constructor 함수 정의하고 new 붙여서 생성 (이름은 Capital로 하는 것이 Convention)

        + Object.create() 함수 사용 (Constructor 함수 안만들어도 돼서 편리)

    function Car(make, model, year) {
      this.make = make;
      this.model = model;
      this.year = year;
    }
    
    const myCar = new Car('Eagle', 'Talon TSi', 1993);
    // Animal properties and method encapsulation
    const Animal = {
      type: 'Invertebrates', // Default value of properties
      displayType: function() {  // Method which will display type of Animal
        console.log(this.type);
      }
    };
    
    // Create new animal type called animal1
    const animal1 = Object.create(Animal);
    animal1.displayType(); // Output: Invertebrates

     

     

    Additional.

    1. Property는 기본적으로 String으로 변환될 수 있는 어떤 type도 가능하지만 valid identifier가 아닌 경우 dot notation이 아닌 [ ]로만 접근 가능 

     

    2. (다음에) Class-based와 Prototype-based 차이 공부하기 (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Details_of_the_Object_Model)

     

     

    Reference.

    '개발 > Javascript' 카테고리의 다른 글

    Call / Bind / Apply  (0) 2022.06.06
    Class  (0) 2022.06.06
    Map, Set  (0) 2022.06.06
    Iterator / Generator / Iterable  (0) 2022.06.06
    Strict Mode  (0) 2022.06.06
Designed by Tistory.