
๋น์ทํ ๊ฐ์ฒด๋ฅผ ๋ณด๋ค ์ฝ๊ฒ ์ฌ๋ฌ๊ฐ ๋ง๋ค๊ธฐ ์ํด์ ์์ฑ
const User = function(name, age){
this.name = name;
this.age = age;
this.showName = funciton() {
console.log(`hello, ${name}`)
}
}
const mike = new User('Mike' , 30);
class User2{
constructor(name, age){
this.name = name;
this.age = age;
}
showName(){
console.log(this.name)
}
}
const tom = new User2('Tom', 19)
new๋ฅผ ํตํด ํธ์ถํ์ ๋ ๋ด๋ถ์์ ์ ์๋ ๋ด์ฉ์ผ๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๊ฒ์ ์์ฑ์ํจ์์ ๋์ผ!
constructor: ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์ฃผ๋ ์์ฑ์ ๋ฉ์ธ์ง
๊ฐ์ฒด๋ฅผ ์ด๊ธฐํํ๊ธฐ ์ํ ๊ฐ์ด ์ ํด์ง๊ณ , ์ธ์๋ฅผ ๋๊ฒจ๋ฐ์ ์ ์์
showName() ์ User2์ prototype์ ์ ์ฅ๋จ
๋ฐ๋ผ์, mike๋ ๊ฐ์ฒด ๋ด๋ถ์ showName,
tom์ prototype์์ showName์ด ์์
*์์ฑ์ ํจ์
const User = function(name, age){
this.name = name;
this.age = age;
};
User.prototype.showName = funciton() {
console.log(`hello, ${name}`)
};
const mike = User('Mike' , 30); //new๋ฅผ ๋นผ๋ด
mike // undefined
for(const p in mike) {
console.log(p);
} //name age showName
*ํด๋์ค
class User2{
constructor(name, age){
this.name = name;
this.age = age;
}
showName(){
console.log(this.name)
}
}
const tom = User2('Tom', 19)
tom // ์๋ฌ
for(const p in tom) {
console.log(p);
} //name age
โ๏ธ proto ์์ ์๋ constructor์ ๋ณด๋ฉด, User2 ์๋ constructor๊ฐ class๋ผ๊ณ ๋ช ์
constructor๊ฐ class๋ผ๋ ๊ฑธ ์๊ณ ์๊ณ , ์ด ๊ฒฝ์ฐ์ new ์์ด ํธ์ถํ๋ฉด ์๋ฌ ๋ฐ์
*์์ฑ์ ํจ์
const User = function(name, age){
this.name = name;
this.age = age;
};
User.prototype.showName = funciton() {
console.log(`hello, ${name}`)
};
const mike = new User('Mike' , 30);
for(const p in mike) {
console.log(p);
} //name age showName
*ํด๋์ค
class User2{
constructor(name, age){
this.name = name;
this.age = age;
}
showName(){
console.log(this.name)
}
}
const tom = new User2('Tom', 19)
for(const p in tom) {
console.log(p);
} //name age
โ๏ธ for in ๋ฌธ์ propo ์์ ์๋ property๋ฅผ ๋ชจ๋ ๋ณด์ฌ์ฃผ๊ณ ,
๊ฐ์ฒด๊ฐ ๊ฐ์ง๊ณ ์๋ property๋ง ํ๋ณํ๊ธฐ ์ํด์ hasOwnProperty๋ฅผ ์ฌ์ฉํด์ผ ํ์
Class ๋ฉ์๋๋ for in ๋ฌธ์์ ์ ์ธ!
extends ํค์๋๋ฅผ ์ฌ์ฉ!
class Car{
constructor(color) {
this.color = color;
this.wheels=4;
}
drive() {
console.log('drive...');
}
stop() {
console.log('Stop!');
}
}
class Bmw extends Car {
park() {
console.log('PARK!');
}
}
const z4 = new Bmw('blue');
z4.drive(); //drive..
>์ผ๋จ z4 -> proto -> proto (Car)
๋ง์ฝ, Car, Bmw๊ฐ ๊ฐ์ ๋ฉ์๋๋ฅผ ๊ฐ์ง๊ณ ์๋ค๋ฉด...?
class Car{
constructor(color) {
this.color = color;
this.wheels=4;
}
drive() {
console.log('drive...');
}
stop() {
console.log('Stop!');
}
}
class Bmw extends Car {
park() {
console.log('PARK!');
}
stop() {
console.log('OFF');
}
}
const z4 = new Bmw('blue');
z4.stop(); //OFF
๋์ผํ ์ด๋ฆ์ ๋ฉ์๋๊ฐ ๋์ค๋ฉด ๋ฎ์ด ์ฐ๊ฒ ๋จ
๋ถ๋ชจ์ ๋ฉ์๋๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ๊ณ ์ถ์ด์ ํ์ฅํ๊ณ ์ถ๋ค๋ฉด...?
supper๋ฅผ ์ฌ์ฉํ๋ฉด ๋จ!
supper.method๋ก ๋ถ๋ชจ ํด๋์ค์ ์ ์๋ ๋ฉ์๋ ์ฌ์ฉ ๊ฐ๋ฅ! => ์ค๋ฒ๋ผ์ด๋ฉ
class Car{
constructor(color) {
this.color = color;
this.wheels=4;
}
drive() {
console.log('drive...');
}
stop() {
console.log('Stop!');
}
}
class Bmw extends Car {
park() {
console.log('PARK!');
}
stop() {
supper.stop();
console.log('OFF');
}
}
const z4 = new Bmw('blue');
z4.stop(); //Stop! OFF
class Car{
constructor(color) {
this.color = color;
this.wheels=4;
}
drive() {
console.log('drive...');
}
stop() {
console.log('Stop!');
}
}
class Bmw extends Car {
constructor(){
this.navigation = 1;
}
park() {
console.log('PARK!');
}
}
const z4 = new Bmw('blue') //error ๋ฐ์
โ๏ธ constructor์์ this๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ super constructor, ์ฆ ๋ถ๋ชจ ์์ฑ์๋ฅผ ๋ฐ๋์ ๋จผ์ ํธ์ถํด์ผ ํจ!
extends๋ก ํ ๋น๋ ์์ class๋ ๋น ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ this๋ฅผ ํ ๋นํ๋ ์์ ์ ๊ฑด๋ ๋
๋ฐ๋ผ์ ํญ์ superํค์๋๋ก ๋ถ๋ชจ class์ constructor๋ฅผ ์์ฑํด์ค์ผํจ!!
class Car{
constructor(color) {
this.color = color;
this.wheels=4;
}
drive() {
console.log('drive...');
}
stop() {
console.log('Stop!');
}
}
class Bmw extends Car {
constructor(){
super();
this.navigation = 1;
}
park() {
console.log('PARK!');
}
}
const z4 = new Bmw('blue')
โ๏ธ ์ ๋ง๋ค์ด์ง, ์ด ๋ blue๋ฅผ ๋ฃ์ด์คฌ์ด๋ color๋ undefined,
์์ class์ constructor์ color๋ฅผ ๋ฐ๊ณ ๋๊ฒจ์ฃผ๋ ์์ ์ ํด์ผํจ
๋์ผํ ์ธ์๋ฅผ ๋ฐ๋ ์์ ์ด ํ์
์ฆ,
class Bmw extends Car {
constructor(color){
super(color);
this.navigation = 1;
}
park() {
console.log('PARK!');
}
}
๐ค ์ฒ์์๋ ์ธ์๋ฅผ ์ ๋ฃ์์ด๋ ์ ๋์ํ๋๋ฐ ์์ผ๊น?
class Bmw extends Car {
park() {
console.log('PARK!');
}
โ๏ธ ์ฒ์, ์ ์ฝ๋๊ฐ ์ ๋์ํ ์ด์ :
constructor๊ฐ ์์ผ๋ฉด, ๊ทธ ๋ถ๋ถ์ด ์๋ ๊ฒ์ฒ๋ผ ํ๋(...args)์ค ๋ณด๊ธฐ!
class Bmw extends Car {
constructor(...args){
super(...args);
}
park() {
console.log('PARK!');
}
}
const z4 = new Bmw('blue');
โญ๏ธ ์์ ์์ฑ์๋ ๋ฌด์กฐ๊ฑด ๋ถ๋ชจ ์์ฑ์๋ฅผ ํธ์ถํด์ผ ํจ! โญ๏ธ
์์ ์์ฑ์์ constructor๊ฐ ์์ผ๋ฉด, ์ฒ๋ฆฌ๋์ง ์์์
super()๋ฅผ ์ด์ฉํด์ ํธ์ถํด์ฃผ๊ณ this.property๋ฅผ ์ด์ฉํด์ ํ ๋นํด ์ค์ผ ํจ
constructor์์ color ๊ฐ์ ๋ฐ์ ํ super๋ก ๋๊ฒจ ์ค์ผ ์ ์์ฑ๋จ.