๐จ ์ค๋์ class์ ๋ํ์ฌ ๊ณต๋ถํด๋ณด์,,,,
์ง๊ธ๊น์ง ๋น์ทํ ํํ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ธฐ ์ํด์ ์์ฑ์ ํจ์๋ฅผ ์ฌ์ฉํ์๋๋ฐ class๋ฅผ ์ฌ์ฉํด์๋ ๋ง๋ค ์ ์๋ค.
Class๋ ES6์ ์ถ๊ฐ๋ ์คํ์ ๋๋ค.
// ์์ฑ์ ํจ์
const User = function (name, age) {
this.name = name;
this.age = age;
this.showName = function () {
console.log(this.name);
};
};
: ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ํจ์๋ฅผ ์๋ฏธํ๋ค.
_proto_
์ prototype์ ๊ฐ๋ค.prototype์ ์์ฑ์ ํจ์์ ์ ์ํ ๋ชจ๋ ๊ฐ์ฒด๊ฐ ๊ณต์ ํ ์ํ
_proto_
๋ ์์ฑ์ ํจ์๋ฅผ new๋ก ํธ์ถํ ๋, ์ ์ํด๋์๋ prototype์ ์ฐธ์กฐํ ๊ฐ์ฒด
prototype์ ์์ฑ์ ํจ์์ ์ฌ์ฉ์๊ฐ ์ง์ ๋ฃ๋ ๊ฑฐ๊ณ ,ย _proto_
๋ new๋ฅผ ํธ์ถํ ๋ prototype์ ์ฐธ์กฐํ์ฌ ์๋์ผ๋ก ๋ง๋ค์ด์ง๋ค.
์์ฑ์์๋ prototype, ์์ฑ์๋ก๋ถํฐ ๋ง๋ค์ด์ง ๊ฐ์ฒด์๋ย _proto_
์์ฑ์์๋ prototype, ์์ฑ์๋ก๋ถํฐ ๋ง๋ค์ด์ง ๊ฐ์ฒด์๋ย _proto_
๐ย prototype์ด ๊ฐ๋ฐ์์
์ฅ์์ ๊ฐ์ฒด์ ๋ณํ๋ฅผ ์ฃผ๊ธฐ์ํด accessํด์ผ ๋ ๊ฒ์ด๊ณ ,ย _proto_
๋ ์์ฑ์๋ก๋ถํฐ ๋ง๋ค์ด์ง ๊ฐ์ฒด๊ฐ prototype์ ์ฐธ์กฐํ ๊ฐ์ฒด์ด๋ค.
_proto_
์ constructor์ ๊ด๊ณclass๋ฅผ ์ฌ์ฉํ์ฌ ๋ง๋ ํจ์
class User2 {
constructor(name, age) {
this.name = name;
this.age = age;
}
showName() {
console.log(this.name);
}
}
const tom = new User2("hoo", 26);
๐คย ์ฐจ์ด์ ์ ???!!!
๐คย ๊ทธ๋ผ ์์ฑ์ ํจ์๋ฅผ classํจ์์ ๋์ผํ๊ฒ ๋์ํ๋๋ก ๋ง๋ค๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ ๊น??
// ์์ฑ์ ํจ์
const User = function (name, age) {
this.name = name;
this.age = age;
// this.showName = function () {
// console.log(this.name);
// };
};
User.prototype.showName = function () {
console.log(this.name);
}
๐คย ๊ทธ๋ ๋ค๋ฉด class๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ ๋ฌด์์ผ๊น???
const User = function (name, age) {
this.name = name;
this.age = age;
// this.showName = function () {
// console.log(this.name);
// };
};
User.prototype.showName = function () {
console.log(this.name);
};
const tom = User("Tom", 30);
new๋ฅผ ์ ๊ฑฐํ ํ์ ์คํํ๋ฉด tom ๊ณผ undefined๊ฐ ๋จ๊ฒ ๋๋ค.
class์ ๋๊ฐ์ด new๋ฅผ ์ ๊ฑฐํด ๋ณด์๋ค. ๐
class User2 {
constructor(name, age) {
this.name = name;
this.age = age;
}
showName() {
console.log(this.name);
}
}
const hoo = User2("Hoo", 26);
๊ทธ๋ผ error๊ฐ ๋จ๊ฒ ๋๋ค.
๐คย ์????
โ for in๋ฌธ์ ํ๋กํ ํ์ ์ ํฌํจ๋ ํ๋กํผํฐ๋ค์ ๋ค ๋ณด์ฌ์ฃผ๊ณ ๊ฐ์ฒด๊ฐ ๊ฐ์ง ํ๋กํผํฐ๋ง ํ๋ณํ๊ธฐ ์ํด์ hs on ํ๋กํผํฐ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค. ๊ทธ๋ฐ๋ฐ class์ ๋ฉ์๋๋ for in๋ฌธ์์ ์ ์ธ๋๋ค.
for..in
์ผ๋ก ๊ฐ์ฒด๋ฅผ ์ํํ ๋, ๋ฉ์๋๋ ์ํ ๋์์์ ์ ์ธ๋ฉ๋๋ค.์๊ฒฉ ๋ชจ๋
๋ก ์คํ๋ฉ๋๋ค(use strict
). ํด๋์ค ์์ฑ์ ์ ์ฝ๋ ์ ์ฒด์ ์๋์ผ๋ก ์๊ฒฉ ๋ชจ๋๊ฐ ์ ์ฉ๋ฉ๋๋ค.class์ ๊ฒฝ์ฐ์ ์์์ extends ํค์๋๋ฅผ ์ฌ์ฉํ๋ค.
class Car {
constructor(color) {
this.color = color;
this.wheels = 4;
}
drive() {
console.log("Drive...");
}
stop() {
console.log("STOP!!!");
}
}
class Audi extends Car {
park() {
console.log("PARK::");
}
}
const A6 = new Audi("white");
๐คย ๋ง์ฝ Audi์์ Car์์ ์ ์ํ ๋ฉ์๋์ ๋์ผํ ๋ฉ์๋๊ฐ ์กด์ฌํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น์ ??
class Car {
constructor(color) {
this.color = color;
this.wheels = 4;
}
drive() {
console.log("Drive...");
}
stop() {
console.log("STOP!!!");
}
}
class Audi extends Car {
park() {
console.log("PARK::");
}
stop() {
console.log("OFF!!");
}
}
const A6 = new Audi("white");
โ off๊ฐ ๋์ค๊ฒ ๋๋ค.
๐คย ๋ง์ฝ ๋ถ๋ชจ์ ๋ฉ์๋๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ๊ณ ์ถ์ผ๋ฉด์ ํ์ฅํ๊ณ ์ถ์ ๋๋ ์ด๋ป๊ฒ ํด์ผ๋ ๊น??
๐ย ๊ทธ๋ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ฐ๋ก !!! super()!!!!
class Audi extends Car {
park() {
console.log("PARK::");
}
stop() {
super.stop();
console.log("OFF!!");
}
}
const A6 = new Audi("white");
โ ์ด๋ ๊ฒ stop์ด ๋์ค๊ณ off๊ฐ ๋์จ๋ค.
class Audi์ constructor๋ฅผ ์ฌ์ฉํด์ ๋ค๋น๊ฒ์ด์ ์ ์ถ๊ฐํด๋ณด๊ฒ ์ต๋๋ค.
class Audi extends Car {
constructor() {
this.navigation = 1;
}
park() {
console.log("PARK::");
}
}
const A6 = new Audi("white");
์ด๋ ๊ฒ ์ ์ฅํ๋ฉด ERROR๊ฐ ๋๋ค. ใ ใ ใ ใ
class Audi extends Car {
super();
constructor() {
this.navigation = 1;
}
park() {
console.log("PARK::");
}
}
const A6 = new Audi("white");
๋ค์ A6๋ฅผ ์ฝ์์ฐฝ์ ํ์ธํด๋ณด๋ฉด
โ navigation ์ 1๋ก ์ ๋จ์ง๋ง, color์ undefined๊ฐ ๋ฌ๋ค. ์???!!!!
class Audi extends Car {
constructor(color) {
super(color);
this.navigation = 1;
}
park() {
console.log("PARK::");
}
}
const A6 = new Audi("white");
constructor์ color์ ๋ฐ๊ณ super์ color์ ๋๊ฒจ์ค์ผ ํ๋ค.
โ ๊ทธ๋ผ ์ ๋ค์ด๊ฐ์ง๋ค.!!!!
์ ๋ฆฌ!!
class Car {
constructor(color) {
this.color = color;
this.wheels = 4;
}
drive() {
console.log("Drive...");
}
stop() {
console.log("STOP!!!");
}
}
class Audi extends Car {
park() {
console.log("PARK::");
}
}
const A6 = new Audi("white");
class Car {
constructor(color) {
this.color = color;
this.wheels = 4;
}
drive() {
console.log("Drive...");
}
stop() {
console.log("STOP!!!");
}
}
class Audi extends Car {
constructor(...args){
super(...args);
}
park() {
console.log("PARK::");
}
}
const A6 = new Audi("white");