JavaScript 프로토타입 상속에 대한 빠른 소개
8073 단어 javascriptprogramming
다음 객체로 사용자를 표현했다고 가정해 보겠습니다.
let user = {
name: 'John Snow',
getName() {
return this.name;
},
};
추가
isAdmin
속성이 true
로 설정된 동일한 모양과 기능을 가진 관리 사용자가 필요합니다. 반복하지 않고 프로토타입 상속을 통해 이를 달성하는 방법은 다음과 같습니다.let user = {
// ...
};
let admin = Object.create(user);
admin.isAdmin = true; // "isAdmin" is a new property set only in `admin`
admin.name = 'Daenerys Targaryen'; // "name" is an inherited property that is overwritten
console.log(admin.getName()); // Daenerys Targaryen ("getName" is also inherited from `user`)
Object.create(user)
를 호출하여 user
의 프로토타입을 admin
만들었습니다. 이는 user
~ admin
의 모든 속성과 메서드에 액세스할 수 있음을 의미합니다.
프로토타입 체인
user.getName()
및 admin.geName()
를 호출하면 두 가지 다른 일이 발생합니다.getName
에서 직접 user
를 찾지만 admin
에서는 찾지 않습니다. admin
의 경우 프로토타입( user
)에서 암묵적으로 한 단계 더 나아가 파악하기 어려운 getName
을 찾습니다. 프로토타입에 도달하기 위해 한 단계 더 나아가 프로토타입 체인을 살펴보고 있습니다. 예를 들어 다음과 같이 루트 사용자를 도입하면 이 체인이 확장될 수 있습니다.
let user = {
//...
};
let admin = Object.create(user);
//...
let root = Object.create(admin);
root.isRoot = true;
root.name = 'Night King';
console.log(root.getName()); // Night King (inherited from `user`)
console.log(root.isAdmin); // true (inherited from `admin`)
console.log(root.isRoot); // true (proper to `root`)
여기에서
root.getName
를 조회할 때 user
프로토타입까지 프로토타입 체인을 살펴봅니다.
ES6 클래스
ES6 클래스와 해당 인스턴스도 이면에서 프로토타입을 사용합니다. 생성자를 정의하면 모든 속성과 메서드가
prototype
속성에 저장됩니다. User
클래스와 일부 인스턴스를 정의하여 실제로 작동하는지 살펴보겠습니다.class User {
constructor(name) {
this.name = name;
}
getName() {
return this.name;
}
}
const user1 = new User('Joe');
const user2 = new User('Kim');
console.log(User.prototype === user1.__proto__); // true
console.log(user1.__proto__ === user2.__proto__); // true
보시다시피 생성자와 인스턴스는 모두 동일한 프로토타입을 공유합니다. 생성자에서
prototype
를 사용하고 인스턴스에서 __proto__
를 사용하여 프로토타입에 액세스합니다.
마무리
개체 간에 속성과 메서드를 공유하는 것은 코드를 재사용 가능하고 체계적으로 만들 수 있기 때문에 중요합니다. 프로토타입 상속이라는 개념을 통해 JavaScript에서 이를 달성합니다. 프로토타입은 동일한 속성과 메서드를 찾는 다른 객체가 참조하는 객체입니다. 프로토타입은 또한 프로토타입을 가질 수 있으며 프로토타입 체인을 형성하는 식으로 프로토타입을 가질 수 있습니다. 주어진 개체에서 속성이나 메서드를 직접 찾을 수 없을 때 이 사슬을 거칩니다.
Reference
이 문제에 관하여(JavaScript 프로토타입 상속에 대한 빠른 소개), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/nazifbara/a-quick-introduction-to-javascript-prototypal-inheritance-3d4i텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)