Basic Inheritance with Object.create - Lee-hyuna/33-js-concepts-kr GitHub Wiki
Basic Inheritance with Object.create
λ²μ : http://adripofjavascript.com/blog/drips/basic-inheritance-with-object-create.html
[JavaScript λ΄μ€ λ ν°] (http://adipofjavascript.com/default.htm)μ μ²μμΌλ‘ κ²μλμμ΅λλ€ .
λͺ κ°μ§ λ¬Έμ λ μ°λ¦¬κ° [μμ±μλ₯Ό μ¬μ©νμ¬ κΈ°λ³Έ μμμ ꡬννλ λ°©λ²] (http://adipofjavascript.com/blog/drips/basic-inheritance-with-javascript-constructors.html)μμ μ΄ν΄ 보μμ΅λλ€. μ΄λ² νΈμμλ μλ‘μ΄ Object.create
λ₯Ό μ¬μ©νμ¬ λμΌν μμ
μ μννλ λ°©λ²μ μ΄ν΄ λ³΄κ² μ΅λλ€.
μμμ μν΄ μμ±μλ₯Ό μ¬μ©ν λ, μ°λ¦¬λ μμ±μμprototype
μμ±μ λ€μκ³Ό κ°μ΄ μμ±μ 첨λΆν©λλ€ :
μ¬κΈ° μ½κ°μ μ¬μΆ©μ μ΄ μμ΅λλ€.
function SuperHuman (name, superPower) {
this.name = name;
this.superPower = superPower;
}
SuperHuman.prototype.usePower = function () {
console.log(this.superPower + "!");
};
var banshee = new SuperHuman("Silver Banshee", "sonic wail");
// Outputs: "sonic wail!"
banshee.usePower();
SuperHuman
μμ±μλ μ΄κΈ°ν λ‘μ§μ ν¬ν¨νκ³ ,SuperHuman.prototype
μ λͺ¨λ SuperHuman
μΈμ€ν΄μ€λ€μ κ±Έμ³ κ³΅μ λλ λ©μλλ€μ ν¬ν¨ν©λλ€.
Object.create
λ₯Ό μ¬μ©νμ¬ κ°μ κΈ°λ³Έ λ‘μ§μ ꡬννλ€λ©΄, μ½κ° λ€λ₯΄κ² λ³΄μΌ κ²μ
λλ€
var superHuman = {
usePower: function () {
console.log(this.superPower + "!");
}
};
var banshee = Object.create(superHuman, {
name: { value: "Silver Banshee" },
superPower: { value: "sonic wail" }
});
// Outputs: "sonic wail!"
banshee.usePower();
μ΄ κ²½μ° λ¨Όμ νλ‘ν νμ
κ°μ²΄ superHuman
μ μ μν λ€μ Object.create
λ₯Ό μ¬μ©νμ¬ superHuman
μ μμλ°μ μλ‘μ΄ κ°μ²΄λ₯Ό λ§λλλ€. λ λ²μ§Έ μΈμλ μ½κ° μ΄μν΄ λ³΄μΌμ§ λͺ¨λ₯΄μ§λ§ κ°λ¨νκ² μμ± μ€λͺ
μ κ°μ²΄ μΌλΏμ
λλ€. [Object.defineProperty`λ₯Ό μ¬μ©νμ¬ κ°μ²΄μ μμ±μ λ―ΈμΈ μ‘°μ ν©λλ€.] (http://adripofjavascript.com/blog/drips /creating-unwritable-properties-with-object-defineproperty/default.htm).
μ, μ°λ¦¬ μμ μ κΈ°λ₯μ μΆκ°νλ λμ superHuman
μΌλ‘λΆν° μμλ°μ μλ‘μ΄ νμ
μ λ§λ€κ³ μΆλ€λ©΄ μ΄λ»κ²ν΄μΌν κΉμ? κ·Έκ² μ΄λ»κ² μκ²Όμ΄?
var superHero = Object.create(superHuman, {
allegiance: { value: 'Good' },
saveTheDay: {
value: function() {
console.log(this.name + ' saved the day!')
},
},
})
var marvel = Object.create(superHero, {
name: { value: 'Captain Marvel' },
superPower: { value: 'magic' },
})
// Outputs: "Captain Marvel saved the day!"
marvel.saveTheDay()
μ¬νκΉμ§λ κ·Έλ°λλ‘ μλλ€. κ·Έλ¬λ μΊ‘ν΄ λ§λΈ (Captain Marvel)μμνΌ μΈκ°
νλ‘ν νμ
λ°©λ²μ μ κ·Ό ν μ μμ΅λκΉ?
// Outputs: "magic!"
marvel.usePower();
λ€, κ·Έλ μ΅λλ€!
Object.create
λ₯Ό μ¬μ©νλ©΄ κ°μ²΄λ₯Ό νλ‘ν νμ
μΌλ‘ μ¬μ©ν μ μκΈ° λλ¬Έμ μμ 체μΈμ κ°λ¨νκ² μ€μ ν μ μμ΅λλ€. κ·Έλ¬λObject.create
μ μν΄ κ΄λ¦¬λλ μμμinstanceof
μ μν΄ κ°μ§ λ μ μμ΅λλ€. λμ μ λ€μκ³Ό κ°μ΄isPrototypeOf
λ©μλλ₯Ό μ¬μ©ν νμκ° μμ΅λλ€ :
// Outputs: true
console.log(superHero.isPrototypeOf(marvel));
// Outputs: true
console.log(superHuman.isPrototypeOf(marvel));
superHero
μsuperHuman
λͺ¨λmarvel
μ νλ‘ν νμ
체μΈμ μΌλΆμ΄κΈ° λλ¬ΈμisPrototypeOf
νΈμΆμ κ°κ° trueλ₯Ό 리ν΄ν©λλ€.
μ°λ¦¬κ° κ²ν ν λ€λ₯Έ JavaScript κΈ°λ₯κ³Ό λ§μ°¬κ°μ§λ‘Object.create
λ ECMAScript 5μ κΈ°λ₯μ΄λ©° IE8κ³Ό κ°μ ꡬν λΈλΌμ°μ μμλ μ¬μ©ν μ μμ΅λλ€.
μ΄κ²μ΄Object.create
μ¬μ©μ λν κ°λ¨ν μκ°μ
λλ€. μ½μ΄ μ£Όμ
μ κ°μ¬ν©λλ€!
μ‘°μμ ν΄λνΌ