>  기사  >  웹 프론트엔드  >  JavaScript의 프로토타입 상속 이해 - 개발자 가이드

JavaScript의 프로토타입 상속 이해 - 개발자 가이드

Barbara Streisand
Barbara Streisand원래의
2024-11-15 07:50:03462검색

Understanding JavaScript

안녕하세요 동료 개발자 여러분! 수년간 PHP의 클래스 기반 상속을 사용해본 후 JavaScript의 프로토타입 상속에 뛰어드는 것은 마치 왼손으로 쓰는 법을 배우는 것 같았습니다. 오늘 저는 JavaScript를 특별하게 만드는 고유한 상속 접근 방식에 대해 제가 배운 내용을 공유하고 싶습니다.

기본 - 무엇이 다른가요?

클래스로 작업하는 PHP나 Java와 달리 JavaScript는 프로토타입을 사용합니다. JavaScript의 모든 개체에는 "프로토타입"이라는 다른 개체에 대한 내부 링크가 있습니다. 이를 대체 메커니즘으로 생각하십시오. 객체에 존재하지 않는 속성에 액세스하려고 하면 JavaScript가 객체의 프로토타입에서 해당 속성을 찾습니다.

const pet = {
  makeSound() {
    return "Some generic sound";
  }
};

const cat = {
  purr() {
    return "Purrrr";
  }
};

// Set pet as the prototype of cat
Object.setPrototypeOf(cat, pet);

// Now cat can use methods from pet
console.log(cat.makeSound()); // "Some generic sound"
console.log(cat.purr());      // "Purrrr"

프로토 체인 - 더 깊어진다

이제 흥미로워집니다. 프로토타입은 자체 프로토타입을 가질 수 있으며 이를 "프로토타입 체인"이라고 부릅니다. JavaScript는 필요한 것을 찾거나 null 프로토타입에 도달할 때까지 이 체인을 계속 찾습니다.

const animal = {
  eat() {
    return "Nom nom nom";
  }
};

const pet = {
  makeSound() {
    return "Some generic sound";
  }
};

const cat = {
  purr() {
    return "Purrrr";
  }
};

Object.setPrototypeOf(pet, animal);
Object.setPrototypeOf(cat, pet);

// cat can now access methods from both pet and animal
console.log(cat.purr());      // "Purrrr"
console.log(cat.makeSound()); // "Some generic sound"
console.log(cat.eat());       // "Nom nom nom"

생성자 패턴 - 보다 친숙한 접근 방식

PHP와 같은 클래스 기반 언어를 사용했다면 생성자 패턴이 더 친숙할 것입니다.

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

Animal.prototype.eat = function() {
  return `${this.name} is eating`;
};

function Cat(name) {
  Animal.call(this, name);
}

// Set up inheritance
Cat.prototype = Object.create(Animal.prototype);
Cat.prototype.constructor = Cat;

Cat.prototype.purr = function() {
  return `${this.name} says purrrr`;
};

const felix = new Cat("Felix");
console.log(felix.eat());  // "Felix is eating"
console.log(felix.purr()); // "Felix says purrrr"

최신 JavaScript - 내부 클래스

ES6에는 PHP 개발자에게 친숙해 보일 수 있는 클래스 구문이 도입되었습니다. 하지만 속지 마세요. 프로토타입 상속에 대한 단순한 구문 설탕일 뿐입니다.

class Animal {
  constructor(name) {
    this.name = name;
  }

  eat() {
    return `${this.name} is eating`;
  }
}

class Cat extends Animal {
  purr() {
    return `${this.name} says purrrr`;
  }
}

const felix = new Cat("Felix");

참호에서 전하는 전문가의 팁

수년간 PHP와 JavaScript를 모두 사용하면서 배운 몇 가지 팁은 다음과 같습니다.

  1. 가능한 경우 상속보다 구성을 선호하세요
  2. 프로토타입 체인을 얕게 유지하세요 - 깊은 체인은 성능을 저하시킬 수 있습니다
  3. 더 깔끔한 코드를 위해 클래스 구문을 사용하되 디버깅을 위해서는 프로토타입을 이해하세요
  4. 상속 체인을 수동으로 생성할 때는 항상 생성자 속성을 설정하세요

마무리

프로토타입 상속을 이해하는 것이 처음에는 이상하게 느껴질 수 있습니다. 특히 PHP나 Java를 사용하는 경우라면 더욱 그렇습니다. 그러나 한번 클릭해 보면 유연성과 강력함을 높이 평가하게 될 것입니다. 이는 객체 지향 프로그래밍에 대해 다르게 생각하게 만드는 JavaScript 기능 중 하나입니다.

JavaScript 상속과 관련하여 흥미로운 문제에 직면한 적이 있나요? 아래에 댓글을 남겨주세요. 여러분의 이야기를 듣고 싶습니다!

위 내용은 JavaScript의 프로토타입 상속 이해 - 개발자 가이드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.