#1633 λ° #1634μ μ견과 μ°Έμ‘°λ λ¬Έμ νμ μ£Όμ΄μ§ ν΄λμ€μ νλ‘ν νμ μ νμ΄νΈλ¦¬μ€νΈμ μΆκ°ν μ μλ λ°νμ μ΅μ μ λ§λλ κ²μ΄ μ’μ΅λλ€.
ν νλ¦Ώ μ¬μΉ λΆλ¬μ€κΈ°
template ({some: "input object"}, { allowedPrototypes: [
Test
] })
λ€μμ΄ trueμΈ κ²½μ° μμ±μ νμΈν μ μμ΅λλ€.
parent[propertyName] === Test.prototype[propertyName] && Test.prototype.hasOwnProperty(propertyName)
μΉ μλ²μμ μ¬μ©μ μ μ ν΄λμ€λ₯Ό μ¬μ©ν λ λμμ΄ λ κ²μ΄λΌκ³ μκ°ν©λλ€. κ·Έλ¬ν νκ²½μμ νλ‘ν νμ κ²μ¬λ₯Ό λλ κ²μ νμ€ν μ μ₯λμ§ μκΈ° λλ¬Έμ λλ€.
μ΄μ λν μ견μ μ¬μκ³ μΆμ΅λλ€.
ν κ°μ§ μ μ¬μ μΈ λ¬Έμ λ μ¬μ©μκ° λ€μκ³Ό κ°μ κ²½μ° νμ©λ νλ‘ν νμ
μ B
λ₯Ό μΆκ°νλ©΄ μλν κ²μΌλ‘ μμνλ€λ κ²μ
λλ€.
class A { get a() { return 'a' } }
class B extends A {}
const parent = new B();
parent['a'] === B.prototype['a'] && B.prototype.hasOwnProperty('a') // => false
μ΄κ²μ λμμ§ μμ΅λλ€. λ¨μ§ λ¬Έμνν΄μΌ ν νμκ° μμ§λ§, κ½€ λ§μ μ¬λλ€μ λλΌκ² ν κ²μ λλ€.
μνΌν΄λμ€κ° νμ΄νΈλ¦¬μ€νΈμ μλμ§ νμΈν μλ μμΌλ―λ‘ "A"μ "B"μ μμ±μ μλ½νλ €λ©΄ "A"λ§ νμ΄νΈλ¦¬μ€νΈμ μΆκ°νλ©΄ λ©λλ€.
λ€λ₯Έ λ°©λ²μ μκ°μ΄ μ§λ¨μ λ°λΌ λ³κ²½λ μ μλ λͺ¨λ κΈ°λ³Έ ν΄λμ€λ₯Ό λΈλ리μ€νΈμ μΆκ°ν΄μΌ νκΈ° λλ¬Έμ λ μ΄λ ΅μ΅λλ€.
@nknapp getPrototypeOf
λ° getOwnPropertyDescriptor
λ₯Ό μ¬μ©νμ¬ getterκ° μ μλμλμ§ νμΈν μ μμ΅λκΉ? μ΄κ²μ΄ μ΄λ―Έ μμ λ λ¬Έμ λ‘ νκ·νλμ§ μ¬λΆλ νμ€νμ§ μμ΅λλ€.
class Example {
get hello() {
return 'world';
}
}
const obj = new Example();
console.log(obj.hello);
// "world"
console.log(Object.getOwnPropertyDescriptor(obj, 'hello'));
// undefined
console.log(Object.getOwnPropertyDescriptor(Object.getPrototypeOf(obj), 'hello'));
// { configurable: true, enumerable: false, get: function get hello() { return 'world'; }, set: undefined }
κ°μ₯ μ μ©ν λκΈ
ν κ°μ§ μ μ¬μ μΈ λ¬Έμ λ μ¬μ©μκ° λ€μκ³Ό κ°μ κ²½μ° νμ©λ νλ‘ν νμ μ
B
λ₯Ό μΆκ°νλ©΄ μλν κ²μΌλ‘ μμνλ€λ κ²μ λλ€.μ΄κ²μ λμμ§ μμ΅λλ€. λ¨μ§ λ¬Έμνν΄μΌ ν νμκ° μμ§λ§, κ½€ λ§μ μ¬λλ€μ λλΌκ² ν κ²μ λλ€.