안녕하세요 동료 개발자 여러분! 수년간 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"
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를 모두 사용하면서 배운 몇 가지 팁은 다음과 같습니다.
프로토타입 상속을 이해하는 것이 처음에는 이상하게 느껴질 수 있습니다. 특히 PHP나 Java를 사용하는 경우라면 더욱 그렇습니다. 그러나 한번 클릭해 보면 유연성과 강력함을 높이 평가하게 될 것입니다. 이는 객체 지향 프로그래밍에 대해 다르게 생각하게 만드는 JavaScript 기능 중 하나입니다.
JavaScript 상속과 관련하여 흥미로운 문제에 직면한 적이 있나요? 아래에 댓글을 남겨주세요. 여러분의 이야기를 듣고 싶습니다!
위 내용은 JavaScript의 프로토타입 상속 이해 - 개발자 가이드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!