Object Opreation

  • Object에 같은 프로퍼티 키 사용

  • 변수 이름이로 프로퍼티 값 설정

  • Object에 function 작성

let sameKey = {key: 1, key:2};

  • ES3 키가 같아도 추가됨

  • ES5 strict 모드는 키가 같으면 에러

  • ES6 은 뒤에것으로 덮어짐

변수 이름으로 프로퍼티 값 설정

let one = 1, two =2

let pp = { one, two};

decriptor

  • ES5

  • 프로퍼티 디스크립터

    • 속성 이름, 속성 값으로 구성

    • 프로퍼티 속성 정의

  • 프로퍼티 디스크립터 타입 분류

    • 데이터 프로퍼티 디스크립터

    • acceess 프로퍼티 디스크립터

var obj = {};

Object.defineProperty(obj,”book”, {

value : 123,

enumerable : true

});

프로퍼티 디스크립터 타입 인식기준

  • 먼저 value와 writable 속성 체크

es5 getter

  • get 속성

var obj = {};

Object.defineProperty(obj, “book”, {

get: function(){return “책;" }

}

var result = obj.book;

  • getter

    • obj.book; 코드를 만나면

    • obj.book의 get()을 자동으로 호출

    • obj.book.get()으로 호출하면 에러 발생

es5 setter

  • set 속성

var obj = {sports:”축구”};

Object.defineProperty(obj, “item”, {

set: function(param){this.sports = param; }

}

obj.item = ‘농구" ;

  • setter

    • obj.item ; 코드를 만나면

    • obj.item.set()을 자동으로 호출

ES6 getter

var obj = {

value:123,

get getTotal(){

return this.value;

}

obj.getTotal;

getTotal앞에 obj 실행

ES6 setter

var obj = {

set setTotal(){

thi.value =123,

}

obj.setTota();

is()

  • 두개의 파라미터 값과 값 타입 비교

    • 같으면 true, 아니면 false 반환
  • 오브젝트 비교는 아님

    • []과 [], {}과 {} 비교는 false

    • 단, window 오브젝트 비교는 true

javascript 값비교 방법

=== 값과 타입

== 값만

Object.is() 값과 타입

===, Object.is() 차이

  • +0,-0 비교

  • === true, Object.is() false

  • NaN 과 NaN 비교

  • === false, Object.is() true

assign()

두번째 파라미터의 오프젝트 프로퍼티를

  • 첫 번째 파라미터의 오브젝트에 복사하고

  • 첫 번째 파라미터 반환

첫번째 파라미터에 열거 가능한 Object 지정

  • 미지정, undefined, null 이면 Type Error

두번째 파라미터에 복사할 오브젝트 지정

  • 열거 가능한 오브젝트 지정

  • own property만 복사

  • [[prototype]] 복사 안함

  • 프로퍼티 디스크립터 복사안함

두번째 파라미터를 지정하지 않으면 첫번째 파라미터로 반환

let obj = Object.assign(123,45);

두번째 파라미터가 열거가능한 오브젝트가 아니면 복사 안함

Object를 할당하면 프로퍼티가 연동됨

  • 한쪽의 프로퍼티값을 바꾸면 다른 곳도 바뀜

연동되지 않게 하려면 별도 처리 필요

let a = {a1: “1”, a2: “2”}

let b = {}

b = a // 값변동시 연동됨

그래서

for (var key in a){

b[key] = a[key];

};

하지만 assign 사용하면 프로퍼티 값 연동 방지

let b = Object.assign({}.a);

setPrototypeOf()

첫번째 파라미터의 prototype에 두번째 파라미터 설정

첫번째 파라미터 작성 기준

  • 오브젝트, 인스턴스 지정

  • 오브젝트가 프로퍼티 추가 붙가이면 TypeError

  • Boolean, Number, String, Symbol이면

  • 두번째 파라미터를 설정하지 않음

ES5에 getPrototypeOf() 있음

자바스크립트 sharing

  • 객체

두번째 파라미터 작성 기준

  • 오브젝트와 prototype 지정

  • function, 인스턴스도 가능하지만 목적기능에 부합하지않음

__proto__

protoype은 모든 인스턴스에 공유

인스턴스를 생성하면 오브젝트의 prototype에 연결된 프로퍼티가 인스턴스의 __proto__ 첨부됨

__proto__ 의 메서드를 호출하면 오브젝트.prototype의 메서드가 호출됨

__proto__ 계층구조를 만듬

__proto__ : 엔진 영역

getter, setter

__proto__ 에 function 추가

  • __proto__ 에추가되지 않고

  • 오브젝트의 prototype 에 추가됨(setproperty 사용하면됨)

  • 모든 인스턴스에서 공유 할 수 있도록 연결

__proto__ 엔진이 사용

  • 그 동안 스펙에 없는데 브라우저에서 지원

  • 스펙의 부록에 __proto__ 가 작성되어있음

  • 사용하지말라는 뉘앙스가 강함

  • 오브젝트와 할당된 객체 사이에 prototype을 이용하여 공유된다

  • 오브젝트에 prototype에 set하면 할당된 객체 에서 호출됨

results matching ""

    No results matching ""