Simple Inheritance with JavaScript - Lee-hyuna/33-js-concepts-kr GitHub Wiki
์๋ฌธ ์ถ์ฒ: https://www.sitepoint.com/simple-inheritance-javascript/
์์ ๊ตฌํ
JavaScript๋ฅผ ์ฌ์ฉํ์ฌ ์ด ๊ณ์ธต์ผ๋ก ๋ง๋ค๋ ค๋ ํญ๋ชฉ์ ์๊ฐํํด๋ณด์.
์ฐ์ , ClassA๋ฅผ ๋ง๋ ๋ค. ๋ช ์์ ์ธ ํด๋์ค๊ฐ ์๊ธฐ ๋๋ฌธ์, ์๋์ ๊ฐ์ ํจ์๋ฅผ ๋ง๋ค์ด๋์ผ๋ก์จ ์ ์ํ ์ ์๋ค.
var ClassA = function() {
this.name = "class A";
}
"class"์ new
Keyword๋ก ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ค.
var a = new ClassA();
ClassA.prototype.print = function() {
console.log(this.name);
}
๊ทธ๋ฆฌ๊ณ a์ ์ฐ๊ฒฐ๋ object๋ฅผ ์ด์ฉํ๋ค.
a.print();
๊ฝค ์ฝ์ฃ ?
์ด๋ฒ์ ์์ฃผ ์งง์ ์ฝ๋๋ฅผ ์๊ฐํ๋ค.
var ClassA = function() {
this.name = "class A";
}
ClassA.prototype.print = function() {
console.log(this.name);
}
var a = new ClassA();
a.print();
์ด์ ํด๋์ค ์ฌ์ด์ "์์์ฑ"์ ๋ง๋๋ ๋๊ตฌ๋ฅผ ์ถ๊ฐํด๋ณด์. ์ด ํด์ ํ ๊ฐ์ง ์ผ๋ง ํ๋ฉด ๋๋ค.
ํ๋กํ ํ์
๋ณต์ :
var inheritsFrom = function (child, parent) {
child.prototype = Object.create(parent.prototype);
};
๋ง๋ฒ์ด ์ผ์ด๋๋ ๊ณณ์ด ๋ฐ๋ก ์ด ๊ณณ์ด์ผ!
ํ๋กํ ํ์
์ ๋ณต์ ํจ์ผ๋ก์จ function์ ์๋ก์ด ํด๋์ค๋ก ์ด์ ํ๋ค.
๊ทธ๋์ ์ฒซ ๋ฒ์งธ ํด๋์ค๊ฐ ๋ ๋ ๋ฒ์งธ ํด๋์ค๋ฅผ ์ถ๊ฐํ๊ณ ์ถ๋ค๋ฉด ์ด ์ฝ๋๋ฅผ ์ฌ์ฉํด์ผ๋ง ํ๋ค.
var ClassB = function() {
this.name = "class B";
this.surname = "I'm the child";
}
inheritsFrom(ClassB, ClassA);
ClassB
๊ฐ ClassA
์ print
๊ธฐ๋ฅ ์์๋ฐ์๋ค.
var b = new ClassB();
b.print();
๊ฒฐ๊ณผ,
class B
ClassB์ ์ธ์ ๊ธฐ๋ฅ๋ ๋ฌด์ํ ์ ์๋ค.
ClassB.prototype.print = function() {
ClassA.prototype.print.call(this);
console.log(this.surname);
}
๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ด๋ค
class B
Iโm the child
์ฌ๊ธฐ์ print
function์ ์ป๊ธฐ ์ํด ClassA.prototype
์ผ๋ก callํ๋ ๊ฒ์ด๋ค.
๊ทธ๋ฐ ๋ค์ call
function ๋๋ถ์ ํ์ฌ Object์ ๊ธฐ๋ณธ ํจ์๋ฅผ ํธ์ถํ ์ ์์ต๋๋ค(this).
ClassC
๋ฅผ ๋ง๋๋๊ฒ ๋ช
ํํด์ก๋ค.
var ClassC = function () {
this.name = "class C";
this.surname = "I'm the grandchild";
}
inheritsFrom(ClassC, ClassB);
ClassC.prototype.foo = function() {
// Do some funky stuff here...
}
ClassC.prototype.print = function () {
ClassB.prototype.print.call(this);
console.log("Sounds like this is working!");
}
var c = new ClassC();
c.print();
๊ฒฐ๊ณผ
class C
Iโm the grandchild
Sounds like this is working!