프로토타입의 프로퍼티
프로토타입 확장에서 프로토타입 객체인 Object.prototype에 새로운 함수를 추가하는 방법을 소개하였습니다.
[JavaScript]프로토타입 확장(prototype extend)
프로토타입 확장 지금까지 프로토타입을 주제로 작성된 포스팅 내용을 정리하자면, 모든 객체(숫자, 문자열, 객체, 배열, 함수 등)는 내부 프로퍼티인 [[Prototype]]를 가지고 있습니다. 프로토타입
developer-talk.tistory.com
즉, 프로토타입 객체도 일반 객체처럼 동적으로 프로퍼티를 추가 또는 삭제할 수 있습니다.
다음 예제는 최상위 프로토타입 객체인 Object.prototype에 두 개의 프로퍼티를 추가합니다.
// address 프로퍼티 추가(문자열)
Object.prototype.address = 'Seoul';
// show 프로퍼티 추가(함수)
Object.prototype.show = function() {
console.log('show() 메서드 호출!');
}
console.dir(Object.prototype);
[실행 결과]

Object.prototype 객체를 확인하면 address, show 프로퍼티가 추가된 것을 확인할 수 있습니다. 즉, 프로토타입은 객체이며, 프로퍼티를 추가할 수 있습니다.
그리고 프로토타입 객체의 프로퍼티는 delete 연산자를 사용하여 제거할 수 있습니다.
다음 예제는 delete 연산자로 Object.prototype 객체의 hasOwnProperty 프로퍼티를 제거합니다.
delete Object.prototype.hasOwnProperty;
var obj = {
name: 'Bob'
}
console.log(obj.hasOwnProperty('name'));
[에러 내용]

hasOwnProperty 프로퍼티가 제거되었으므로 객체에서 hasOwnProperty 메서드를 호출할 수 없습니다. 따라서, 프로토타입 객체의 프로퍼티를 제거하는 경우 JavaScript 표준 API를 제거하지 않도록 주의할 필요가 있습니다.
프로토타입의 메서드
프로토타입 객체는 함수인 프로퍼티를 호출하기 위해 점 표기법을 사용하므로 메서드를 가질 수 있습니다.
Object.prototype.show = function() {
console.log('show() 메서드 호출!');
}
Object.prototype.show(); // show() 메서드 호출!
그렇다면, 프로토타입 메서드 내부에서 this를 사용한다면 this는 어디에 바인딩될까요?
"메서드와 this"에서 설명했듯이 메서드에 사용된 this는 메서드를 호출한 객체로 바인딩됩니다.
[JavaScript]메서드와 this(Method and this)
JavaScript에서 객체의 프로퍼티가 함수인 경우에는 해당 프로퍼티를 메서드라고 말합니다. 이번 포스팅은 메서드에서 this가 어떻게 동작하는지 설명합니다. this 바인딩 메서드에 사용된 this는 메
developer-talk.tistory.com
동치 연산자를 사용하여 this와 Object.prototype를 비교하면, true가 반환되는 것을 확인할 수 있습니다.
Object.prototype.showThis = function() {
console.log(this === Object.prototype);
}
Object.prototype.showThis(); // true
Object.prototype뿐만 아니라 사용자 정의 함수의 prototype 객체에도 프로퍼티를 추가할 수 있습니다.
function UserInfo(name, age) {
this.name = name;
this.age = age;
}
UserInfo.prototype.showThis = function() {
console.log(this === UserInfo.prototype);
}
UserInfo.prototype.showThis(); // true
사용자 정의 함수인 UserInfo의 프로토타입에 showThis라는 메서드를 추가했습니다. 그리고 showThis 메서드의 this는 UserInfo의 prototype 객체와 동일합니다.
정리
- 프로토타입에도 프로퍼티를 추가하거나 삭제할 수 있습니다.
- 프로토타입 메서드에서 사용된 this는 프로토타입 객체와 동일합니다.
'JavaScript > 함수' 카테고리의 다른 글
[JavaScript]화살표 함수를 사용하면 안 되는 경우 (0) | 2022.10.09 |
---|---|
[JavaScript]함수 호이스팅(Function Hoisting) (0) | 2022.07.07 |
[JavaScript]프로토타입 확장(prototype extend) (0) | 2022.07.06 |
[JavaScript]함수의 프로토타입(prototype in function) (0) | 2022.07.05 |
[JavaScript]프로토타입 체인(Prototype Chain) (0) | 2022.07.05 |
댓글