상세 컨텐츠

본문 제목

[자바스크립트] 게터세터

카테고리 없음

by esoesmio 2023. 5. 8. 02:17

본문

const person1 = {
    age: 17,

    get koreanAge () {
        return this.age + 1;
    },

    set koreanAge (krAge) {
        this.age = krAge - 1;
    }
}

console.log(person1, person1.koreanAge);

person1.koreanAge = 20;

console.log(person1, person1.koreanAge);

 

 

class YalcoChicken {
    constructor (name, no) {
        this.name = name;
        this.no = no;
    }
    get chainTitle() {
        return `${this.no}호 ${this.name}점`;
    }
    set chainNo(chainNo) {
        if (typeof chainNo !== 'number') return;
        if (chainNo <= 0) return;
        this.no = chainNo;
    }
}

const chain1 = new YalcoChicken('판교', 3);
console.log(chain1.chainTitle);

chain1.chainNo = '4';
console.log(chain1);

chain1.chainNo = -1;
console.log(chain1);

chain1.chainNo = 4;
console.log(chain1);

 

이거고쳐라

 

class YalcoChicken {
  constructor (name, no) {
    this.name = name;
    this.no = no;
  }
  get no () { 
    return this._no + '호점'; 
  }
  set no (no) { 
    this._no = no;
  }
}

const chain1 = new YalcoChicken('판교', 3);

 

class YalcoChicken {
    constructor (name, no) {
        this.name = name;
        this.no = no;
    }
    get no () {
        return this._no + '호점';
    }
    set no (no) {
        this._no = no;
    }
}

const chain1 = new YalcoChicken('판교', 3);

console.log(chain1);
console.log(chain1.no);
console.log(chain1._no);

 

 

여기서 네임 어떻게 꺼낼꺼냐

 

 

 

 

class Employee {
    #name = '';
    #age = 0;
    constructor (name, age) {
        this.#name = name;
        this.#age = age;
    }
    get name() {
        return this.#name;
    }
    set name(newName) {
        this.#name = newName;
    }
}

const emp1 = new Employee('김복동', 32);

console.log(emp1);

console.log(emp1.name); // 김복동

 

 

이거 두개가 뭐가다른가?

 

const obj = {
log: ['a', 'b', 'c'],
latest() {
return this.log[this.log.length - 1];
}
};

console.log(obj.latest());
// Expected output: "c"


const aobj = {
log: ['a', 'b', 'c'],
get latest() {
return this.log[this.log.length - 1];
}
};

console.log(aobj.latest);
// Expected output: "c"

 

이미 존재하는 객체에 접근자 정의해라. defineproperty로

 

 

const o = {a: 0};

Object.defineProperty(o, 'b', { get: function() { return this.a + 1; } });

console.log(o.b) // 접근자 실행, a + 1 반환 (0 + 1 = 1)

 

 

계산된 속성 이름 써봐라

 

 

const expr = 'foo';

const obj = {
  get [expr]() { return 'bar'; }
};

console.log(obj.foo); // "bar"

 

 

게터세터로 이게 나오게 해봐라

 

 

const language = {
    set current(name) {
        this.log.push(name);
    },
    log: []
};

language.current = 'EN';
language.current = 'FA';

console.log(language.log);
// Expected output: Array ["EN", "FA"]

 

이것도 다시해봐라

 

 

 

const expr = 'foo';

const obj = {
  baz: 'bar',
  set [expr](v) { this.baz = v; }
};

console.log(obj.baz);
//  "bar"

obj.foo = 'baz';
//  run the setter

console.log(obj.baz);
//  "baz"

댓글 영역