자바스크립트 생성자와 프로토타입 체인의 메서드 중복 정의 방지 방법

자바스크립트에서 생성자와 프로토타입 체인을 사용하여 객체를 생성하고 상속을 구현할 수 있습니다. 그러나 때로는 중복으로 정의된 메서드가 발생할 수 있습니다. 이러한 중복을 방지하기 위해 다음과 같은 방법을 사용할 수 있습니다.

1. 프로토타입 체인에 메서드를 정의하기

생성자 함수의 프로토타입 객체에 메서드를 정의하면 해당 생성자로 생성된 모든 객체에서 해당 메서드를 공유합니다. 이는 메모리 사용을 줄이고 중복된 코드를 방지하는 데에 유용합니다.

function Person(name) {
  this.name = name;
}

Person.prototype.sayHello = function() {
  console.log("Hello, " + this.name);
};

var person1 = new Person("John");
var person2 = new Person("Jane");

person1.sayHello(); // 출력: Hello, John
person2.sayHello(); // 출력: Hello, Jane

위의 예제에서 Person 생성자 함수의 prototype 객체에 sayHello 메서드를 정의했습니다. 이렇게 정의된 메서드는 Person 생성자로 생성된 모든 객체에서 공유됩니다.

2. 메서드를 생성자 함수 내부에서 조건문으로 정의하기

특정 조건에 따라 메서드를 정의하고 싶은 경우, 생성자 함수 내부에서 조건문을 활용하여 메서드를 동적으로 정의할 수 있습니다. 이 방법을 사용하면 필요한 경우에만 메서드를 정의할 수 있습니다.

function Person(name, age) {
  this.name = name;
  this.age = age;

  if (age > 18) {
    this.canVote = function() {
      console.log(this.name + " can vote.");
    };
  }
}

var person1 = new Person("John", 25);
var person2 = new Person("Jane", 16);

person1.canVote(); // 출력: John can vote.
person2.canVote(); // undefined

위의 예제에서 Person 생성자 함수의 canVote 메서드는 age의 값에 따라 동적으로 정의됩니다. person1 객체는 age가 25로 canVote 메서드가 정의되지만, person2 객체는 age가 16으로 메서드가 정의되지 않았기 때문에 undefined가 됩니다.

#javascript #prototype #중복정의 #메서드