Object.defineProperty μ λν΄μ μμ보μ
π Object.defineProperty?
Vue 2.x
λΌμ΄λΈλ¬λ¦¬ μμ€λ₯Ό 보λ€λ³΄λ©΄ Object.definePrototype
μΌλ‘
κ°μ²΄μ μλ‘μ΄ μμ±μ ν λΉνλ κ²μ νμΈν μ μμ΅λλ€.
Object.defineProperty() μ νΉμ§
- κ°μ²΄μ μμ±μ μΈλ°νκ² μΆκ°νκ±°λ μμ ν μ μμ΅λλ€.
- κ°μ²΄μ
getter / setter
λ₯Ό μ§μ ν μ μμ΅λλ€. IE 9
λ²μ λΆν° μ§μν©λλ€. (λ°λΌμVue 2.x
λ μ΄ λΆλΆμ μ μ½μ λ°μ΅λλ€.)
π μμ± μμ μ (Property descriptor)
μμ± μμ μλ λ°μ΄ν° μμ μ
μ μ κ·Όμ μμ μ
λ‘ κ΅¬μ±λ©λλ€.
Object.defineProperty
μ μ¬μ©νλ μμ μλ λ μ νμ€ νλμ¬μΌν©λλ€.
μ΄ λμ λͺ¨λ κ°μ²΄λ‘ λ€μμ μ νμ ν€λ₯Ό 곡μ ν©λλ€.
configurable : κ°μ²΄ μμ±μ κ° λ³κ²½ λ° μμ κ°λ₯ μ¬λΆ
enumerable : κ°μ²΄ μμ± μ΄κ±° μ λ ΈμΆ μ¬λΆ
λ°μ΄ν° μμ μ
λ°μ΄ν° μμ μλ κ°μ κ°μ§λ μμ±μ μ μν λ μ¬μ©ν©λλ€.
μ΄λ λ€μ ν€λ₯Ό μ νμ μΌλ‘ ν¬ν¨ν©λλ€.
value : μμ±μ μ°κ΄λ κ°
writable : ν λΉ μ°μ°μ (=) λ‘ κ°μ λ°κΏ μ μλμ§ μ¬λΆ
μ κ·Όμ μμ μ
μ κ·Όμ μμ μλ getter, setter
λ₯Ό μ μν λ μ¬μ©ν©λλ€.
μ΄λ λ€μ ν€λ₯Ό μ νμ μΌλ‘ ν¬ν¨ν©λλ€.
get : μ κ·Όμλ‘ μ¬μ©ν ν¨μ (μμ±μ μ κ·Όν λ μ¬μ©ν κ°μ²΄λ₯Ό this λ‘ μ§μ ν΄μ 맀κ°λ³μ μμ΄ νΈμΆ)
set : μ€μ μλ‘ μ¬μ©ν ν¨μ (μμ±μ κ°μ ν λΉν λ μ¬μ©ν κ°μ²΄λ₯Ό this λ‘ μ§μ ν΄μ ν κ°μ 맀κ°λ³μμ ν¨κ» νΈμΆ)
π μμ± μμ± μμ
1οΈβ£ writable
ν΄λΉ μμ±μ΄ false
λΌλ©΄ κ°μ κ°±μ μ΄ λΆκ°μ°¨
λ§μ½ κ°μ κ°±μ νλ €κ³ νλ©΄ 무μλ©λλ€.
const ob = {};
Object.defineProperty(ob, "a", {
value: 30,
writable: false,
});
console.log(ob.a); // 30
ob.a = 50;
console.log(ob.a); // 30
2οΈβ£ enumerable
enumerable
μ Object.assign
κ³Ό μ κ° μ°μ°μκ° ν΄λΉ μμ±μ μ΄κ±°ν μ μλμ§ κ²°μ ν©λλ€.
λν Symbol
μ΄ μλ μμ±λ€μ λν΄μ for in
κ³Ό Object.keys
μμ μΆμΆ κ°λ₯νμ§λ κ²°μ ν©λλ€.
const ob = {};
Object.defineProperty(ob, "a", {
value: 30,
enumerable: false,
});
Object.defineProperty(ob, "b", {
value: 50,
enumerable: true,
});
console.log(Object.keys(ob)); // ['b']
3οΈβ£ configurable
ν΄λΉ νΉμ±μ μ¬μ©νλ©΄ κ°μ²΄μμ ν΄λΉ μμ±μ μμ νΉμ κ·Έ μμ±μ μ§μ μλ₯Ό λ³κ²½ν μ μλμ§ κ²°μ ν©λλ€.
const ob = {};
Object.defineProperty(ob, "a", {
value: 30,
configurable: false,
});
delete ob.a;
console.log(ob.a); // 30
4οΈβ£ getter / setter
κ°μ²΄μ μμ±μ getter / setter
λ₯Ό μ§μ νλ©΄ κ°κ° μμ±μμ
κ°μ μ½μ λμ μΈλ νΈμΆμν¬ ν¨μλ₯Ό μ μν μ μμ΅λλ€.
function AboutMe() {
Object.defineProperty(this, "name", {
get() {
console.log("get name");
return this.stored_name;
},
set(name) {
console.log("set name");
this.stored_name = name;
},
});
}
const info = new AboutMe();
info.name = "HandHand";
console.log(info.name);
/** λ€μ μ€ν κ²°κ³Όλ₯Ό κ°μ§λλ€ */
set name
get name
HandHand
π μ°Έκ³ μλ£
'π¨βπ» web.dev > js.ts' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[TypeScript] enum κ³Ό union type, μΈμ μ¨μΌν κΉ? (2) | 2022.07.09 |
---|---|
[JavaScript] Array.sort λ μμ μ±μ 보μ₯ν κΉ? (0) | 2022.03.09 |
[TypeScript] js.map νμΌμ 무μμΌκΉ? (0) | 2022.03.07 |
[JavaScript] Promise.all vs Promise.allSettled (0) | 2022.02.20 |
[JavaScript] μ΅λͺ ν¨μμ κΈ°λͺ ν¨μ, μΈμ μ¨μΌν κΉ? (0) | 2022.02.20 |
π¬ λκΈ