Intro To Prototypal Inheritance JS - Lee-hyuna/33-js-concepts-kr GitHub Wiki
μλ¬Έ - https://dev.to/danny/intro-to-prototypal-inheritance---js-9di
μ΄ κΈμμ νλ‘ν νμ μμμ λν΄ μ€λͺ μ νλ € ν©λλ€.
"μ΅μ " μ μ 쑰건μΌλ‘ "νλ‘ν νμ μκ°"μ λν μ΄μ κΈμ λ³Όμ μμ΅λλ€.
μμμ λν΄μ μλ°μ€ν¬λ¦½νΈλ μ€μ§ νλμ ꡬ쑰λ§μ κ°μ§κ³ μμ΅λλ€. : κ°μ²΄. κ° κ°μ²΄μλ νλ‘ν νμ μ΄λΌκ³ νλ λ€λ₯Έ κ°μ²΄μ λν λ§ν¬λ₯Ό 보μ νλ private μμ±( Prototypeμ΄λΌκ³ ν¨ )μ΄ μμ΅λλ€. νλ‘ν νμ κ°μ²΄λ μ체 νλ‘ν νμ μ κ°μ§κ³ μμΌλ©° κ°μ²΄κ° νλ‘ν νμ μΌλ‘ nullλ‘ λλ¬ν λκΉμ§ κ³μ μ§νλ©λλ€. μ μμ λ°λ₯΄λ©΄ μ μμ λ°λ₯΄λ©΄ nullμλ νλ‘ν νμ μ΄ μμΌλ©°μ΄ νλ‘ν νμ 체μΈμ μ΅μ’ λ§ν¬ μν μν©λλ€.
JSμμλ μ΄ νλ‘ν νμ μ²΄μΈ λλ¬Έμ μμλ§ κ°λ₯ν©λλ€.
μμ λ₯Ό λ΄ μλ€. μ΄ μμ λ νλ‘ν νμ μμ κ°λ μ μ€λͺ ν©λλ€. first, last, ageμ μΈκ°μ§ κ°μ μ·¨νλ Student μμ±μ ν¨μλ₯Ό μμ±ν©λλ€.
var Student = function(first,last,age){
this.name = {
first,
last
};
this.age = age;
}
μ°λ¦¬κ° ν¨μλ₯Ό μμ±ν λλ§λ€ JSμμ§μ μ°λ¦¬μκ² λ κ°μ κ°μ²΄λ₯Ό λ§λλλ€.
- νλλ ν¨μ κ°μ²΄ μ체μ΄κ³
- νλλ νλ‘ν νμ κ°μ²΄
μ°λ¦¬λ νλ‘ν νμ κ°μ²΄λ₯Ό κ°λ¦¬ν€λ ".prototype" μ°Έμ‘° μμ±μ μ¬μ©νμ¬ JSμμ§μ΄ μμ±ν prototype μμ±μ μ¬μ©ν μ μμ΅λλ€.
JSμμ§μ μν΄ μμ±λ νλ‘ν νμ κ°μ²΄μ "sayMessage"λΌλ ν¨μλ₯Ό μΆκ°ν μ μμ΅λλ€.
var Student = function(first,last,age){
this.name = {
first,
last
};
this.age = age;
}
Student.prototype.sayMessage = function(){
return "Hello!! "+this.name.first+" "+this.name.last+" your age is "+this.age+"."
}
Student (μμ±μ) ν¨μλ₯Ό μ¬μ©νμ¬ κ°μ²΄λ₯Ό λ§λ€ μ μμ΅λλ€.
var studentOne = new Student("dharani","jayakanthan","six");
studentOne.sayMessage();
//"Hello!! dharani jayakanthan your age is six."
μ΄ μλ λ°©μμ "sayMessage" ν¨μλ₯Ό νΈμΆν λ JSμμ§μ μ²μμ "Student" κ°μ²΄λ₯Ό λ³Ό κ²μ λλ€. Student κ°μ²΄μ κΈ°λ₯μ΄ μμΌλ©΄ JSμμ§μ νλ‘ν νμ κ°μ²΄μμ "sayMessage" ν¨μλ₯Ό μ°Ύμ΅λλ€.
μ΄μ "Faculty"λΌλ λ λ€λ₯Έ ν¨μλ₯Ό μμ±ν κ²μ λλ€. "Student"κ³Ό λμΌν λ§€κ° λ³μλ₯Ό λ°μ§λ§ μΆκ°μ μΌλ‘ salaryλ₯Ό 맀κ°λ³μλ₯Ό λ°μ΅λλ€.
var Faculty = function(first,last,age,salary){
Student.call(this,first,last,age);
this.salary = salary;
}
μμ μ½λκ° μννλ μμ μ Faculty μμ±μκ° Student μμ±μμ λμΌν λ§€κ° λ³μλ₯Ό μ¬μ©νκΈ°λ₯Ό μν©λλ€. λ°λΌμ "call" ν¨μλ₯Ό ν΅ν΄ "Student" μμ±μλ₯Ό μμνκ³ "Faculty" μμ±μκ° Studentλ€λ‘ λΆν° μμνλ λ§€κ° λ³μλ₯Ό μ λ¬ν©λλ€.
μ΄ "call"ν¨μλ κΈ°λ³Έμ μΌλ‘ λ€λ₯Έ κ³³μμ μ μλ ν¨μλ₯Ό νΈμΆ ν μ μμ§λ§ νμ¬ μ»¨ν μ€νΈμμλ νμ©νμ§ μμ΅λλ€. 첫λ²μ§Έ λ§€κ° λ³μλ ν¨μλ₯Ό μ€νν λ μ¬μ©ν κ°μ μ§μ νλ©°, λ€λ₯Έ λ§€κ° λ³μλ νΈμΆ λ λ ν¨μμ μ λ¬ λμ΄μΌνλ λ§€κ° λ³μμ λλ€.
νμ λ§€κ° λ³μκ° μλ μμ±μλ₯Ό μμ νλ €λ©΄ λμΌν "call" ν¨μλ‘ μμ±μλ₯Ό μνν μ μμ΅λλ€. κ·Έλ¬λ μ΄ μ°Έμ‘°λ₯Ό "call" μ°Έμ‘°μ λ§€κ° λ³μλ‘ μ 곡 ν΄μΌ ν©λλ€.
Ex : "ConstructorWithNoParameter.call(this)".
μ΄μ "Student" μμ±μλ₯Ό μμ λ°μμ΅λλ€. κ·Έλ¬λ "Faculty" μμ±μ νλ‘ν νμ κ°μ²΄μ λ§ν¬λ₯Ό λ³κ²½νμ§ μμμ΅λλ€. μ΄μ "Faculty" μμ±μ νλ‘ν νμ κ°μ²΄μλ μμ±μ μ체λ₯Ό κ°λ¦¬ν€λ μμ±μ μ°Έμ‘°κ° μμ΅λλ€. λ°λΌμ μ°λ¦¬λ "Student" μμ±μ νλ‘ν νμ κ°μ²΄μμ μμ±ν "sayMessage" ν¨μμ μ‘μΈμ€ νμ§ λͺ»ν©λλ€.
"Faculty"κ° "Student" νλ‘ν νμ κ°μ²΄λ₯Ό μμ λ°λλ‘ νλ €λ©΄
- μλμ μ½λκ° μΆκ°μ μΌλ‘ νμν©λλ€.
Faculty.prototype = Object.create(Student.prototype);
student νλ‘ν νμ μ μμ λ°μμ΅λλ€.. κ·Έλ¬λ μ½λλ₯Ό μμΈν μ΄ν΄λ³΄λ©΄ νκ°μ§ ν΄μΌν κ²μ΄ λ μμ΅λλ€.
- μμμ ν κ²μ μμλ "Student" νλ‘ν νμ κ°μ²΄μ λλ€. "Student.prototype"μλ "constructor"λΌλ μμ±μ΄ μμΌλ©° μ΄ μμ±μ "Student" μμ±μ μ체λ₯Ό κ°λ¦¬ ν΅λλ€.
μ΄λ₯Ό νμΈνκΈ° μν΄ μ΄ μ€μ μ½λμ μΆκ°ν μ μμ΅λλ€.
Faculty.prototype.constructor;
/*
function(first,last,age){
this.name = {first,last};
this.age = age;
}
*/
(Student.prototype.constructor === Faculty.prototype.constructor) ? true : false;
//true
μ΄ μ°Έμ‘°λ₯Ό λ³κ²½νκΈ° μν΄ "Faculty.prototype.contructor"λ₯Ό "Faculty" ν¨μλ‘ μ§μ ν©λλ€.
μ΄μ falseλ₯Ό λ°ννλμ§ νμΈνλ©΄
Faculty.prototype.contructor = Faculty;
(Faculty.prototype.constructor === Student.prototype.constructor) ? true : false;
//false
μ΄μ λͺ¨λ κ²μ μ 리ν μ μμ΅λλ€.
// Student Constructor
var Student = function(first,last,age){
this.name = {first,last};
this.age = age;
}
Student.prototype.message = function(){
if(this.salary){
return this.name.first+" "+this.name.last+" "+"is "+this.age+" years old. And earns "+this.salary;
}
else{
return this.name.first+" "+this.name.last+" "+"is "+this.age+" years old";
}
}
var studentOne = new Student("dharani","jayakanthan","20");
// Faculty Constructor
var Faculty = function(first,last,age,salary){
Student.call(this,first,last,age);
this.salary = salary;
}
Faculty.prototype = Object.create(Student.prototype);
Faculty.constructor = Faculty();
var facultyOne = new Faculty("simon","peter","70","820,000");
facultyOne.message();
// simon peter is 70 years old. And earns 820,000
studentOne.message();
// dharani jayakanthan is 20 years old
μ΄ κ²μ ν΄λμ€λ₯Ό μμνλ μ μΌν λ°©λ²μ΄ μλλλ€. μλ°μ€ν¬λ¦½νΈμμ μμμ λ³΄λ€ μ½κ² μνν μ μλ ECMAScript κΈ°λ₯μ λλ€. κ·Έλ¬λ μ΄λ λͺ¨λ λΈλΌμ°μ μμ μμ§ λ리μ§μλμ§ μμ΅λλ€. μ΄ κΈ°μ¬μμ λ Όμν μ½λλ IE9 μ΄ν λ²μ κΉμ§ μ§μλ©λλ€.