let carName = "포르쉐";
let carModel = "911 타르가";
let carColor = "white";

const startCar = name => {
    console.log(`${name} 출발`);
}

const helloCar = (name, model, color) => {
    const hello = `제 차의 이름은 ${name}이고 모델명은 ${model}입니다. 색상은 ${color}입니다.`;
    console.log(hello);
}

const drvingCar = name => {
    console.log(`${name} 운전!`);
}

// 예제 사용
startCar(carName); // 출력: "포르쉐 출발"
helloCar(carName, carModel, carColor); // 출력: "제 차의 이름은 포르쉐이고 모델명은 911 타르가입니다." 색상은 white입니다.
drvingCar(carName); // 출력: "포르쉐 운전!"
// Car 객체 생성자 함수
function Car(name, model, color) {
    this.name = name;
    this.model = model;
    this.color = color;
}

// Car 객체의 메서드를 프로토타입으로 정의
Car.prototype.start = function() {
    console.log(`${this.name} 출발`);
};

Car.prototype.hello = function() {
    const hello = `제 차의 이름은 ${this.name}이고 모델명은 ${this.model}입니다. 색상은 ${this.color}입니다.`;
    console.log(hello);
};

Car.prototype.drive = function() {
    console.log(`${this.name} 운전!`);
};

// 예제 사용
let myCar = new Car("포르쉐", "911 타르가", "white");

myCar.start(); // 출력: "포르쉐 출발"
myCar.hello(); // 출력: "제 차의 이름은 포르쉐이고 모델명은 911 타르가입니다. 색상은 white입니다."
myCar.drive(); // 출력: "포르쉐 운전!"
// 부모 객체 선언
function Animal() {
    this.name = "Animal"; // 부모 객체(Animal)가 가지고 있는 속성입니다.
}

// 부모 객체(Animal)에 프로토타입이라는 방식으로 메서드 추가
Animal.prototype.say = function() {
    console.log("I am an animal.");
};

// 자식 객체 선언
function Dog() {
    this.name = "Dog";
}

// 프로토타입이라는 방식으로 부모 객체(Animal)가 가지고 있는 속성을 자식 객체(Dog)에게 상속됩니다.
Dog.prototype = new Animal();

// 자식(Dog) 객체에서 부모 객체(Animal)의 속성과 메서드를 사용합니다.
const myDog = new Dog();
console.log(myDog.name); // 출력: "Dog"
myDog.say(); // 출력: "I am an animal."
function Animal(name) {
    this.name = name;
}

// Animal 생성자 함수로부터 생성된 모든 객체들이 상속받는 프로토타입 객체
Animal.prototype.speak = function() {
    console.log(`안녕하세요, ${this.name}입니다.`);
};

const dog = new Animal("멍멍이");
dog.speak(); // 출력: "안녕하세요, 멍멍이입니다."
const parent = {
    sayHello: function() {
        console.log("안녕하세요!");
    }
};

const child = Object.create(parent);
child.sayHello(); // 출력: "안녕하세요!"
class Animal {
    constructor(name) {
        this.name = name;
    }
    
    speak() {
        console.log(`${this.name}이 소리를 냅니다.`);
    }
}

class Dog extends Animal { // extends키워드로 Animal 클래스를 상속받음
    constructor(name, breed) {
        super(name);
        this.breed = breed;
    }

    bark() {
        console.log(`${this.name}이 짖습니다.`);
    }
}

const myDog = new Dog("멍멍이", "리트리버");
myDog.speak(); // 출력: "멍멍이이 소리를 냅니다."
myDog.bark(); // 출력: "멍멍이이 짖습니다."