Handlebars.js: proto 속성에 λŒ€ν•œ μ•‘μ„ΈμŠ€ μ œμ–΄

에 λ§Œλ“  2020λ…„ 01μ›” 11일  Β·  3μ½”λ©˜νŠΈ  Β·  좜처: handlebars-lang/handlebars.js

#1633 및 #1634의 의견과 참쑰된 문제 후에 주어진 클래슀의 ν”„λ‘œν† νƒ€μž…μ„ ν™”μ΄νŠΈλ¦¬μŠ€νŠΈμ— μΆ”κ°€ν•  수 μžˆλŠ” λŸ°νƒ€μž„ μ˜΅μ…˜μ„ λ§Œλ“œλŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

ν…œν”Œλ¦Ώ 재치 뢈러였기

template ({some: "input object"}, { allowedPrototypes: [
  Test
] })

λ‹€μŒμ΄ true인 경우 속성을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

parent[propertyName] === Test.prototype[propertyName] && Test.prototype.hasOwnProperty(propertyName)

μ›Ή μ„œλ²„μ—μ„œ μ‚¬μš©μž μ •μ˜ 클래슀λ₯Ό μ‚¬μš©ν•  λ•Œ 도움이 될 것이라고 μƒκ°ν•©λ‹ˆλ‹€. κ·ΈλŸ¬ν•œ ν™˜κ²½μ—μ„œ ν”„λ‘œν† νƒ€μž… 검사λ₯Ό λ„λŠ” 것은 ν™•μ‹€νžˆ μ €μž₯λ˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.

이에 λŒ€ν•œ μ˜κ²¬μ„ μ—¬μ­™κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

feature

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

ν•œ 가지 잠재적인 λ¬Έμ œλŠ” μ‚¬μš©μžκ°€ λ‹€μŒκ³Ό 같은 경우 ν—ˆμš©λœ ν”„λ‘œν† νƒ€μž…μ— 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

이것은 λ‚˜μ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 단지 λ¬Έμ„œν™”ν•΄μ•Ό ν•  ν•„μš”κ°€ μžˆμ§€λ§Œ, κ½€ λ§Žμ€ μ‚¬λžŒλ“€μ„ λ†€λΌκ²Œ ν•  κ²ƒμž…λ‹ˆλ‹€.

λͺ¨λ“  3 λŒ“κΈ€

ν•œ 가지 잠재적인 λ¬Έμ œλŠ” μ‚¬μš©μžκ°€ λ‹€μŒκ³Ό 같은 경우 ν—ˆμš©λœ ν”„λ‘œν† νƒ€μž…μ— 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 }

좜처: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/get#get_Vs._defineProperty

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰

κ΄€λ ¨ 문제

rizen picture rizen  Β·  6μ½”λ©˜νŠΈ

snimavat picture snimavat  Β·  5μ½”λ©˜νŠΈ

DylanPiercey picture DylanPiercey  Β·  7μ½”λ©˜νŠΈ

jlubean picture jlubean  Β·  8μ½”λ©˜νŠΈ

amirzandi picture amirzandi  Β·  7μ½”λ©˜νŠΈ