π Chapter 6: νλ‘ν νμ
- μλ°μ€ν¬λ¦½νΈλ νλ‘ν νμ κΈ°λ° μΈμ΄μ΄λ€.
- νλ‘ν νμ κΈ°λ° μΈμ΄μμλ μ΄λ€ κ°μ²΄λ₯Ό μν(prototype)μΌλ‘ μΌκ³ μ΄λ₯Ό 볡μ (μ°Έμ‘°)ν¨μΌλ‘μ¨ μμκ³Ό κ°μ ν¨κ³Όλ₯Ό μ»λλ€.
π νλ‘ν νμ μ κ°λ μ΄ν΄β
π constructor, prototype, instanceβ
var instance = new Constructor();
- μ΄λ€ μμ±μ ν¨μ(Constructor)λ₯Ό
new
μ°μ°μμ ν¨κ» νΈμΆνλ©΄ Constructor
μμ μ μλ λ΄μ©μ λ°νμΌλ‘ μλ‘μ΄ μΈμ€ν΄μ€κ° μμ±λλ€.- μ΄λ
instance
μλ__proto__
λΌλ νλ‘νΌν°κ° μλμΌλ‘ λΆμ¬λλλ°, - μ΄ νλ‘νΌν°λ
Constructor
μprototype
μ΄λΌλ νλ‘νΌν°λ₯Ό μ°Έμ‘°νλ€.
μ¬κΈ°μ prototype
μ κ°μ²΄μ΄λ€. μ΄λ₯Ό μ°Έμ‘°νλ __proto__
μμ λΉμ°ν κ°μ²΄μ΄λ€.
prototype
κ°μ²΄ λ΄λΆμλ μΈμ€ν΄μ€κ° μ¬μ©ν λ©μλλ₯Ό μ μ₯νλ€. κ·Έλ¬λ©΄ μΈμ€ν΄μ€μμλ μ¨κ²¨μ§ __proto__
λ₯Ό ν΅ν΄ μ΄ λ©μλλ€μ μ κ·Όν μ μκ² λλ€.
- λ€μ μμμ
Person
μ΄λΌλ μμ±μ ν¨μμprototype
μgetName
μ΄λΌλ λ©μλλ₯Ό μ§μ νλ€.
var Person = function (name) {
this._name = name;
};
Person.prototype.getName = function () {
return this._name;
}
var suzi = new Person('Suzi');
suzi.__proto__.getName(); // undefined
Person.prototype === suzi.__proto__ // true
- μ¬κΈ°μ
suzi.__proto__.getName();
νΈμΆνλ λΆλΆμ΄Suzi
λΌλ μ΄λ¦μ΄ μλλΌundefined
κ° λμ¨ μ΄μ λthis
μ λ°μΈλ©λ λμμ΄ μλͺ» μ§μ λμκΈ° λλ¬Έμ΄λ€. - μ΄λ€ ν¨μλ₯Ό λ©μλλ‘μ νΈμΆν λλ λ©μλλͺ
λ°λ‘ μμ κ°μ²΄κ° 곧
this
κ° λλ€. κ·Έλ κΈ° λλ¬Έμ νμ¬this
λsuzi.__proto__
λΌλ κ°μ²΄κ° λλ κ²μ΄λ€. μ΄ κ°μ²΄ λ΄λΆμλname
νλ‘νΌν°κ° μμΌλ―λ‘undefined
λ₯Ό λ°ννλ κ²μ΄λ€. - ν΄κ²°νλ λ°©λ²μΌλ‘λ
__proto__
μμ΄ μΈμ€ν΄μ€μμ 곧λ°λ‘ λ©μλλ₯Ό μ°λ©΄λλ€. μ΄λ¬ν μ΄μ λ__proto__
λ μλ΅ κ°λ₯ν νλ‘νΌν°μ΄κΈ° λλ¬Έμ΄λ€.
var suzi = new Person('Suzi');
suzi.getName(); // Suzi
μ¦,
new
μ°μ°μλ‘Constructor
λ₯Ό νΈμΆνλ©΄instance
κ° λ§λ€μ΄μ§λλ°, μ΄instance
μ μλ΅ κ°λ₯ν νλ‘νΌν°μΈ__proto__
λConstructor
μprototype
μ μ°Έμ‘°νλ€.
__proto__
νλ‘νΌν°λ μλ΅ κ°λ₯νλλ‘ κ΅¬νλΌ μκΈ° λλ¬Έμ μμ±μ ν¨μμprototype
μ μ΄λ€ λ©μλλ νλ‘νΌν°κ° μλ€λ©΄ μΈμ€ν΄μ€μμλ λ§μΉ μμ μ κ²μ²λΌ ν΄λΉ λ©μλλ νλ‘νΌν°μ μ κ·Όν μ μκ² λλ€.
π constructor νλ‘νΌν°β
- μμ±μ ν¨μμ νλ‘νΌν°μΈ
prototype
κ°μ²΄ λ΄λΆμλconstructor
λΌλ νλ‘νΌν°κ° μλ€. μΈμ€ν΄μ€μ__proto__
κ°μ²΄ λ΄λΆμλ λ§μ°¬κ°μ§μ΄λ€. - μ΄ νλ‘νΌν°λ λ¨ μ΄ κ·Έλλ‘ μλμ μμ±μ ν¨μ(μκΈ° μμ )λ₯Ό μ°Έμ‘°νλ€. μΈμ€ν΄μ€λ‘λΆν° κ·Έ μνμ΄ λ¬΄μμΈμ§λ₯Ό μ μ μλ μλ¨μ΄λ€.
var arr = [1, 2];
Array.prototype.constructor === Array; // true
arr.__proto__.constructor === Array; // true
arr.constructor === Array; // true
var arr2 = new arr.constructor(3, 4);
console.log(arr2); // [3, 4];
constructor
λ₯Ό λ³κ²½νλλΌλ μ°Έμ‘°νλ λμμ΄ λ³κ²½λ λΏ μ΄λ―Έ λ§λ€μ΄μ§ μΈμ€ν΄μ€μ μνμ΄ λ°λλ€κ±°λ λ°μ΄ν° νμ μ΄ λ³νλ κ²μ μλλ€. μ΄λ€ μΈμ€ν΄μ€μ μμ±μ μ 보λ₯Ό μμλ΄κΈ° μν΄constructor
νλ‘νΌν°μ μμ‘΄νλ κ² νμ μμ νμ§ μλ€.- λ€μ κ° μ€μ λͺ¨λ λμΌν λμμ κ°λ¦¬ν€κ² λλ€
[Constructor]
[instance].__proto__.constructor
[instance].constructor
Object.getPrototypeOf([instance]).constructor
[Constructor].prototype.constructor
- λ€μ κ° μ€μ λͺ¨λ λμΌν κ°μ²΄(prototype)μ μ κ·Όν μ μλ€.
[Constructor].prototype
[instance].__proto__
[instance]
Object.getPrototypeOf([instance])