Understanding the difference between Object.create() and the new operator. - Lee-hyuna/33-js-concepts-kr GitHub Wiki
Object.create ()μ new μ°μ°μμ μ°¨μ΄μ μ΄ν΄
κ·Έ μ°¨μ΄λ₯Ό μλ κ²μ΄ μ μ€μνκ°μ?
- μ΅κ·Όμ μλ°μ€ν¬λ¦½νΈκ° μλ μ½λλ₯Ό μ€νν©λλ€.
- νλ₯ν κ°λ°μκ° λλ €λ©΄ λͺ¨λ μ νμ μ½λλ₯Ό λ€λ£¨λ λ°©λ²μ λ°°μμΌν©λλ€. κ·Έκ²μ μ€λλ μ½λλ₯Ό ν¬ν¨ν©λλ€!
- νλ μλμμ ECMAScript 6μ λμ
λ class ν€μλλ
new
μ°μ°μλ₯Ό μ¬μ©ν©λλ€.
λ¨Όμ Object.createκ° μννλ μμ μ μ΄ν΄ λ³΄κ² μ΅λλ€.
var dog = {
eat: function() {
console.log(this.eatFood)
}
};
var maddie = Object.create(dog);
console.log(dog.isPrototypeOf(maddie)); //true
maddie.eatFood = 'NomNomNom';
maddie.eat(); //NomNomNom
μμ μμ λ₯Ό λ¨κ³λ³λ‘ μ΄ν΄λ³΄κ³ μ νν 무μμ΄ μΌμ΄λλμ§ λ΄ μλ€.
eat
μ΄λΌλ νλμ λ©μλλ₯Ό κ°μ§dog
λΌλ μ΄λ¦μ κ°μ²΄ 리ν°λ΄μ λ§λλλ€.- νλ‘ν νμ
μ
dog
λ‘ μ€μ ν΄ μμ ν μλ‘μ΄ κ°μ²΄λ₯Ό μμ±νλObject.create(dog)
λ₯Ό μ¬μ©νμ¬maddie
λ₯Ό μ΄κΈ°νν©λλ€. dog
κ°maddie
μ νλ‘ν νμ μΈμ§ ν μ€νΈ ν΄λ³΄μμμ€.this.eatFood
λ₯Ό ν΅ν΄ μΆλ ₯ ν λ¬Έμμ΄μ μ€μ νμμμ€.- μλ‘ μμ± λ κ°μ²΄
maddie
λ₯Ό μ¬μ©νμ¬eat
ν¨μλ₯Ό νΈμΆνμμμ€. - μλ°μ€ν¬λ¦½νΈλ νλ‘ν νμ
체μΈμ ν΅κ³Όνμ¬
this
ν€μλκ°maddie
λ‘ μ€μ λdog
μeat
λ©μλλ₯Ό μ°Ύμ΅λλ€. - NomNomNomμ μ½μμ μΆλ ₯ν©λλ€.
Object.create()λ νλ‘ν νμ
μ΄ dog
λ‘ μ€μ λ μμ ν μλ‘μ΄ κ°μ²΄μΈ maddie
λ₯Ό λ§λ€μμ΅λλ€. μλ‘κ² μμ± λ maddie
κ°μ²΄λ μ΄μ dog
μeat
λ©μλμ μ κ·Ό ν μ μμ΅λλ€.
μ΄μ new μ°μ°μλ₯Ό μ΄ν΄ λ³΄κ² μ΅λλ€.
var Dog = function(){
this.eatFood = 'NomNomNom';
this.eat = function(){
console.log(this.eatFood)
}
};
var maddie = new(Dog);
console.log(maddie instanceof Dog); // True
maddie.eat(); //NomNomNom
new μ°μ°μκ° μ΄ ν¨μμ μ΄λ»κ² μ μ©λλμ§, κ·Έλ¦¬κ³ λ¬΄μμνλμ§ λ΄ μλ€.
maddie
λΌλ μ κ°μ²΄λ₯Ό λ§λλλ€.maddie
λ μμ±μ ν¨μμ νλ‘ν νμ μ μμλ°μ΅λλ€.- 1λ²μμ μμ± λ objectμ
this
κ° μ€μ λ μμ±μλ₯Ό μ€νν©λλ€. - μμ± λ κ°μ²΄λ₯Ό λ°νν©λλ€ (μμ±μκ° κ°μ²΄λ₯Ό λ°ννμ§ μμ λμ).
Object.create ()μ newμ°μ°μμ μ°¨μ΄μ μ 무μμΌκΉμ? κ·Έλ€μ λ λ€ λκ°μ κ²μνλ κ²μ²λΌ 보μ
λλ€.
λ λ€ μλ‘μ΄ κ°μ²΄λ₯Ό λ§λ€κ³ νλ‘ν νμ
μ μμλ°μ΅λλ€.
λ°λΌκ±΄λ. μ΄ μμ λ νΌλμ ν΄κ²°ν μ μμ΅λλ€ :
function Dog(){
this.pupper = 'Pupper';
};
Dog.prototype.pupperino = 'Pups.';
var maddie = new Dog();
var buddy = Object.create(Dog.prototype);
//Using Object.create()
console.log(buddy.pupper); //Output is undefined
console.log(buddy.pupperino); //Output is Pups.
//Using New Keyword
console.log(maddie.pupper); //Output is Pupper
console.log(maddie.pupperino); //Output is Pups.
μ΄ μμ μμ μ£Όλͺ©ν ν΅μ¬ μ¬νμ λ€μκ³Ό κ°μ΅λλ€.
console.log(buddy.pupper); //Output is undefined
buddy.pupper
μ κ²°κ³Όλ μ μλμ§ μμμ΅λλ€. Object.create()
κ° prototype
μ Dog
λ‘ μ€μ νλλΌλ buddy
λ μμ±μμμ this.pupper
μ μ‘μΈμ€ ν μ μμ΅λλ€.
μ΄λ new Dogκ° μ€μ λ‘ μμ±μ μ½λλ₯Ό μ€ννλ λ°λ©΄ Object.createλ μμ±μ μ½λλ₯Ό μ€ννμ§ μλ μ€μν μ°¨μ΄ λλ¬Έμ
λλ€.
Object.create()
μ new μ°μ°μ
κ° μ΄λ»κ² μλ‘ κ΅¬λ³λλμ§μ λν ν΅μ°°λ ₯μ μ»κ² λμκΈ°λ₯Ό λ°λλλ€.