Object.create()λΒ ES5μμ λμ
λμμΌλ©°, μ§μ λ νλ‘ν νμ
μΌλ‘ μλ‘μ΄ κ°μ²΄λ₯Ό λ§λλ λ©μλμ΄λ€.
μλ‘ μμ±λ κ°μ²΄λ λͺ¨λ νλ‘ν νμ κ°μ²΄ νλ‘νΌν°λ₯Ό μμνλ€.
// const newObject = Object.create(prototype)
const animal = {}
const dog = Object.create(animal)λ λ²μ§Έ νλΌλ―Έν°λ₯Ό μ¬μ©ν΄ νλ‘ν νμ μ μλ μλ‘μ΄ νλ‘νΌν°λ₯Ό κ°μ²΄μ μΆκ° ν μ μλ€.
// const newObject = Object.create(prototype, newProperties)
const animal = {}
const dog = Object.create(animal, {
breed: {
value: 'Siberian Husky'
}
});
console.log(dog.breed) //'Siberian Husky'μλΒ μ½λλ Object.create() λ©μλλ₯ΌΒ μ¬μ©ν΄ κ°μ²΄λ₯Ό μμ±νλ μμ μ΄λ€.
var dog = {
eat: function () {
console.log (this.eatFood)
}
};
var maddie = Object.create(dog);
console.log (dog.isPrototypeOf(maddie)); // true
maddie.eatFood = 'NyamNaym';
maddie.eat(); // NyamNaymeatλ©μλλ₯Ό κ°μ§κ³ μλdogκ°μ²΄ μμ±νλ€.Object.create(dog)μ μ¬μ©ν΄maddieλ₯Ό μ΄κΈ°ννκ³dogμ νλ‘ν νμ μΌλ‘ μ€μ λ μλ‘μ΄ μμ ν μλ‘μ΄ κ°μ²΄λ₯Ό λ§λ λ€.- μλ°μ€ν¬λ¦½νΈλ νλ‘ν νμ
체μΈμ ν΅ν΄
dogμμeatλ©μλλ₯Ό μ°Ύμλ΄κ³thisλ₯Όmaddieλ‘ μ€μ νλ€. Object.create()λ νλ‘ν νμ μ΄dogλ‘ μ€μ λmaddieλ₯Ό μλ‘κ² λ§λ€μμΌλ―λ‘maddieκ°μ²΄λdogμ λ©μλμ μ κ·Ό κ°λ₯νλ€.
μλΒ μ½λλ new μ°μ°μλ₯Ό μ¬μ©ν΄ κ°μ²΄λ₯Ό μμ±νλ μμ μ΄λ€.
var Dog = function(){
this.eatFood = 'NyamNyam';
this.eat = function(){
console.log(this.eatFood)
}
};J
var maddie = new(Dog);
console.log(maddie instanceof Dog); // True
maddie.eat(); // NyamNyammaddieλΌλ μλ‘μ΄ κ°μ²΄λ₯Όnewμ°μ°μλ‘ μμ±νλ©°maddieλ μμ±μ ν¨μμ νλ‘ν νμ μ μμνλ€.- μμ±λ κ°μ²΄λ‘
thisμ€μ λκ³ constructorκ° μ€νλλ€. - μμ±λ κ°μ²΄κ° λ°νλλ€. (constructorκ° κ°μ²΄λ₯Ό λ°ννμ§ μμ κ²½μ°)
function Dog(){
this.pupper = 'Pupper';
};
Dog.prototype.pupperino = 'Pups.';
var maddie = new Dog();
var buddy = Object.create(Dog.prototype);
// Object.create()λ₯Ό μ¬μ©ν κ°μ²΄ μμ±
console.log(buddy.pupper); // ***, undefined
console.log(buddy.pupperino); // Pups.
// new μ°μ°μλ₯Ό μ¬μ©ν κ°μ²΄ μμ±
console.log(maddie.pupper); // Pupper
console.log(maddie.pupperino); // Pups.new μ°μ°μλ‘ μμ±λ maddieλ μμ±μ μ½λλ₯Ό μ€ννμ§λ§ Object.create()λ₯Ό μ¬μ©ν΄ μμ±λ buddyλ μμ±μ μ½λλ₯Ό μ€ννμ§ μλλ€.
λ°λΌμ buddyλ μμ±μμμ this.pupperμ μ κ·Ό ν μ μμ΄ buddy.pupperλ undefinedλ₯Ό λ°ννλ€(***).
Objcet.assgin()μ ES6μμ λμ
λμμΌλ©°, νλ μ΄μμ κ°μ²΄μ μ΄κ±° κ°λ₯ν(enumerable) νλ‘νΌν°λ₯Ό λ€λ₯Έ κ°μ²΄λ‘ 볡μ¬νλ λ©μλμ΄λ€.
const copied = Object.assign({}, original);κ° λ³΅μ λ° κ°μ²΄ μ°Έμ‘°κ° λ³΅μ¬λλ μμ 볡μ¬(shallow copy)μ΄λ―λ‘ μλ³Έ κ°μ²΄μ νλ‘νΌν°λ₯Ό μμ νλ©΄ 볡μ¬λ κ°μ²΄μ νλ‘νΌν° λν λ³κ²½λλ€.
const original = {
name: 'toyota',
car: {
color: 'black'
}
}
const copied = Object.assign({}, original);
copied.name // toyota
copied.color // black
// μλ³Έ κ°μ²΄ νλ‘νΌν° μμ
original.name = 'bmw'
original.car.color = 'white'
copied.name // bmw
copied.car.color // white
// μμ 볡μ¬μ΄λ―λ‘ copiedμ νλ‘νΌν° λν λ³κ²½λ¨Reference