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.)