프로토타입
객체 생성자로 뭘 만들었을때 그것으로 만든 객체들 끼리 공유할 수 있는 값이나 함수를 설정가능
- 함수를 만들때마다 같은 함수를 계속 만드는게 아니라 한번만 만듦
function Animal(type, name, sound) {
this.type = type;
this.name = name;
this.sound = sound;
}
Animal.prototype.say = function () {
console.log(this.sound);
}
Animal.prototype.SharedValue = 1;
const dog = new Animal('개', '멍멍이', '멍멍');
const cat = new Animal('고양이', '야옹이', '애옹');
dog.say();
cat.say();
dog.SharedValue;
Animal.prototype.say = function () {
console.log(this.sound);
}
function Dog(name, sound) {
Animal.call(this, '개', name, sound); //call -첫인자는 this,다음으로는 그 다른 펑션의 파라미터들
}
function Cat(name, sound) {
Animal.call(this, '고양이', name, sound); //객체생성해서 기능구연하게 해줌
}
Dog.prototype = Animal.prototype; //프로토타입 - 공유하기로함
Cat.prototype = Animal.prototype;
const dogg = new Dog('개', '멍멍이', '멍멍');
const catt = new Cat('고양이', '야옹이', '애옹');
첫인자는 this,다음으로는 그 다른 펑션의 파라미터들
객체생성해서 기능구연하게 해줌
프로토타입 - 공유하기
class
이런식으로 클래스없었는데 js에 es6에 class 들어옴 간략하게 할 수 있도록
객체생성자와 프로토타입을 쉽게 사용하기 위해서 만들어진 문법
class ClaAnimal {
constructor(type, name, sound) { //생성자
this.type = type;
this.name = name;
this.sound = sound;
}
say() {
console.log(this.sound);
//클래스 상속이 더 쉽다
class Dog extends Animal {
constructor(name,sound){ //생성자
super('개', name,sound) //슈퍼를 써서 자신이 상속받은 클래스의 컨스트럭터를 호출한다
}
}
class Cat extends Animal {
constructor(name,sound){ //생성자
super('고양이', name,sound) //슈퍼를 써서 자신이 상속받은 클래스의 컨스트럭터를 호출한다
}
}
const doggy = new Dog('멍멍이', '멍멍');
const kitty = new Cat('야옹이', '애옹');
const kitty2 = new Cat('야오오옹이이', '애애애애애옹');
doggy.say();
kitty.say();
}
}
class Food {
constructor (name){
this.name =name;
this.brands =[];
}
addBrand(brand){
this.brands.push(brand) //brands 배열에 집어넣기
}
print(){
console.log(`${this.name} 을/를 파는 음식점들:`);
console.log(this.brands.join(',')); //배열안에 있는 것들을 쉼표를 기준으로 (문자열로) 합쳐준다
}
}
const pizza = new Food ('피자');
pizza.addBrand('피자헛');
pizza.addBrand('도미노 피자');
const chicken = new Food ('치킨');
pizza.addBrand('굽네치킨');
pizza.addBrand('BBQ');
pizza.print();
chicken.print();