-
Notifications
You must be signed in to change notification settings - Fork 0
javascript_jquery_basic_3_3a
ν€μλ
Prototype-
__proto__(ECMAScript λͺ μΈλ[[prototype]]λ‘ νκΈ°) -
Constructor(ECMAScript λͺ μΈλ[[construct]]λ‘ νκΈ°)
λ΄λΆ ꡬν
- λͺ¨λ κ°μ²΄λ
__proto__κ°μ²΄λ₯Ό νλ‘νΌν°λ‘ κ°λλ€. (λ΄λΆ μ°Έμ‘°μ©μΌλ‘ μ¬μ©) - μμ±μ(λλ μμ±μ ν¨μ)λ
prototypeκ°μ²΄λ₯Ό νλ‘νΌν°λ‘ κ°λλ€. -
prototypeκ°μ²΄λconstructorκ°μ²΄λ₯Ό νλ‘νΌν°λ‘ κ°λλ€.
// μμ±μ μ μΈ
function Person (name) {
this.name = name;
};
Person.prototype.getName = function() {
return this.name;
};
// Personμ μ΄λ»κ² toString()μ μ¬μ©μ΄ κ°λ₯ν κ²μΌκΉ?
function Person (name) {
this.name = name;
};
Person.prototype.getName = function() {
return this.name;
};
// toStringμ Personμ μμ±μ΄ μλλ€.
console.log(Person.toString());Object.toString() μμ
Object.prototype (MDN)

// μΈμ€ν΄μ€ μμ±
function Person (name) {
this.name = name;
};
Person.prototype.getName = function() {
return this.name;
};
var person1 = new Person('Lee');
console.log(person1.getName());newλ₯Ό μ΄μ©ν΄ μλ‘μ΄ μΈμ€ν΄μ€λ₯Ό μμ±νκ² λλ©΄ μλ μ½λκ° λ΄λΆμμ λμνλ€.
var person1 = new Person('Lee');
// μμ§ λ΄λΆμμ νλ μΌ
person1 = {}; // μλ‘μ΄ κ°μ²΄λ₯Ό λ§λ€κ³
Person.call(person1, 'myName'); // call μ΄μ©ν΄ Person μμ±μλ₯Ό νΈμΆ(thisλ₯Ό person1λ‘)
person1.__proto__ = Person.prototype; // νλ‘ν νμ
μ μ°κ²°νλ€.
person1.getName(); // 'Lee'κ°μ²΄μμ± λ° νλ‘ν νμ μ°κ²°
μ μ½λκ° μ€νλλ©΄ λ€μκ³Ό κ°μ ννλ‘ νλ‘ν νμ 체μΈμ΄ μμ±λλ€.

νλ‘ν νμ 체μΈμ μν ꡬ쑰
μλ°μ€ν¬λ¦½νΈμ λͺ¨λ κ°μ²΄λ μμ μ λΆλͺ¨μΈ prototype κ°μ²΄λ₯Ό κ°λ¦¬ν€λ μ°Έμ‘°λ§ν¬ ννμ μ¨κ²¨μ§ νλ‘νΌν°κ° μλ€. ECMAScriptμμλ μ΄ λ§ν¬λ₯Ό μ묡μ λ§ν¬(implicit link)λΌκ³ λΆλ₯΄λ©° μ΄ λ§ν¬λ λͺ¨λ κ°μ²΄μ __proto__ νλ‘νΌν°μ μ μ₯λλ€.
μλ°μ€ν¬λ¦½νΈμ μμ± κ·μΉμ λͺ¨λ κ°μ²΄λ μμ μ μμ±ν μμ±μ ν¨μμ prototype νλ‘νΌν°κ° κ°λ¦¬ν€λ prototype κ°μ²΄λ₯Ό μμ μ __proto__ νλ‘νΌν°λ‘ μ°κ²°νλ€.
νλ‘ν νμ
체μ΄λμ΄λ νΉμ κ°μ²΄μ νλ‘νΌν°λ λ©μλμ μ κ·Όνλ €κ³ ν λ, ν΄λΉ κ°μ²΄μ μ κ·Όνλ €λ νλ‘νΌν°λ λ©μλκ° μλ€λ©΄ __proto__ λ§ν¬λ₯Ό λ°λΌ μμ μ λΆλͺ¨ μν μ νλ prototype κ°μ²΄μ νλ‘νΌν°λ₯Ό μ°¨λ‘λλ‘ κ²μνλ κ²μ λ§νλ€.
νλ‘ν νμ
체μ΄λμ ν΅ν΄ μμ μ νλ‘νΌν°λΏλ§ μλλΌ, μμ μ λΆλͺ¨μν μ νλ prototype κ°μ²΄μ νλ‘νΌν°μλ μ κ·Όμ΄ κ°λ₯νλ€.
var a = {
attr1: 'a'
};
var b = {
__proto__: a,
attr2: 'b'
};
var c = {
__proto__: b,
attr3: 'c'
};
c.attr1 // 'a'aμ μ‘΄μ¬νλ attr1 μμ±μ κ²μνλ κ³Όμ
- cκ°μ²΄ λ΄λΆμ attr1 μμ±μ μ°Ύλλ€. -> μλ€.
- cκ°μ²΄μ
__proto__μμ±μ΄ μ‘΄μ¬νλμ§ νμΈνλ€. -> μλ€. - cκ°μ²΄μ
__proto__μμ±μ΄ μ°Έμ‘°νλ κ°μ²΄λ‘ μ΄λνλ€. -> bκ°μ²΄λ‘ μ΄λ - bκ°μ²΄ λ΄λΆμ attr1 μμ±μ μ°Ύλλ€. -> μλ€.
- bκ°μ²΄μ
__proto__μμ±μ΄ μ‘΄μ¬νλμ§ νμΈνλ€. -> μλ€. - bκ°μ²΄μ
__proto__μμ±μ΄ μ°Έμ‘°νλ κ°μ²΄λ‘ μ΄λνλ€. -> aκ°μ²΄λ‘ μ΄λ - aκ°μ²΄ λ΄λΆμ attr1 μμ±μ μ°Ύλλ€. -> μλ€. μ°Ύμ μμ±μ κ°μ 리ν΄νλ€.
μ΄λ€ κ°μ²΄μλ μ‘΄μ¬νμ§ μλ attr0 μμ±μ κ²μνλ κ³Όμ
- aκ°μ²΄ λ΄λΆμ attr0 μμ±μ μ°Ύλλ€. -> μλ€.
- aκ°μ²΄μ
__proto__μμ±μ΄ μ‘΄μ¬νλμ§ νμΈνλ€. -> μλ€. - aκ°μ²΄μ
__proto__μμ±μ΄ μ°Έμ‘°νλ κ°μ²΄λ‘ μ΄λνλ€. ->Object.prototypeλ‘ μ΄λ -
Object.prototypeμμ attr0 μμ±μ μ°Ύλλ€. -> μλ€. -
Object.prototypeμμ__proto__μμ±μ μ°Ύλλ€. -> μλ€.
λͺ¨λ νλ‘ν νμ
체μΈμ λμ νμ Object.prototype μ΄λ€.
κ·Έλμ Object.prototypeμ __proto__ μμ±μ΄ μλ€.
attr0 λΌλ μμ±μ νλ‘ν νμ
μ λ§μ§λ§ λ¨κ³μΈ Object.prototypeμ
μ‘΄μ¬νμ§ μκ³ Object.prototypeμλ __proto__ μμ±μ΄ μ‘΄μ¬νμ§ μμΌλ νμμ μ’
λ£νκ³ undefinedλ₯Ό 리ν΄νλ€.
νλ‘ν νμ
κΈ°λ°μ κ°μ²΄μ§ν₯ μμμ ꡬνν μ μλ€.
νλ‘ν νμ
κΈ°λ°μ μμ ꡬν
νλ‘ν νμ
κΈ°λ°μ μμ ꡬν2
ES6μμ classμ extendsλ₯Ό μ΄μ©ν μμ ꡬν
μ‘°κΈ λ μ°μνκ² μμμ ꡬννλ λ°©λ²
- νλ‘ν νμ μμμ ꡬννλ μ¬λ¬κ°μ§ λ°©λ²
- ES6μμ classλ₯Ό μ΄μ©ν μμ λ°©λ²
μ½κ² μ΄ν΄νλ μλ°μ€ν¬λ¦½νΈ νλ‘ν νμ 체μΈ