[JavaScript] 자바스크립트 객체(object) (3) : Object 객체와 Object.prototype 객체의 메소드

2021. 8. 3. 21:27·JavaScript
728x90

 


Object 객체와 Object.prototype 객체의 프로퍼티

- 모든 자바스크립트 객체는 Object 객체와 Object.prototype 객체의 모든 프로퍼티를 상속받는다

- 새로운 프로퍼티나 메소드를 손쉽게 추가할 수 있다

 

 

 

 

 


Object 객체와 Object.prototype 객체의 메소드

자주 사용되는 객체 메소드에는 다음과 같은 것들이 있다

 

> hasOwnProperty() 

- 특정 프로퍼티가 해당 객체에 존재하는지 검사

- 해당 객체에 직접 선언된 프로퍼티만을 검사하기 때문에, 상속받은 프로퍼티는 false값을 반환한다

function Dog(color, name, age, family) {
    this.color = color;
    this.name = name;
    this.age = age;
    this.family = family;
    this.breed = function() {
        return this.color + " " + this.family;
    }
}
var myDog = new Dog("검정색", "곰", 3, "불독");
myDog.hasOwnProperty("color"); // true
myDog.hasOwnProperty("breed"); // true
myDog.hasOwnProperty("class"); // 상속받은 프로퍼티이므로, false를 반환함.

 

 

> propertyIsEnumerable()

- 특정 프로퍼티가 해당 객체에 존재하고, 열거할 수 있는 프로퍼티인지를 검사

function Dog(color, name, age) {
    this.color = color;
    this.name = name;
    this.age = age;
}
var myDog = new Dog("흰색", "마루", 1);
// color 프로퍼티의 enumerable 속성을 false로 설정함.
Object.defineProperty(myDog, 'color', { enumerable : false} );
 
document.write(myDog.propertyIsEnumerable("color") + "<br>"); // false
document.write(myDog.propertyIsEnumerable("name") + "<br>");  // true
document.write(myDog.propertyIsEnumerable("age"));            // true

 

 

> isPrototypeOf()

- 특정 객체의 프로토타입 체인에 현재 객체가 존재하는지 검사

var day = new Date(); // Date 객체를 생성함.
// 객체 day의 프로토타입이 Date.prototype인지를 검사함.
document.write(Date.prototype.isPrototypeOf(day));          // true
document.write(Date.prototype.isPrototypeOf(new String())); // false

 

 

> isExtensible()

- 객체에 새로운 프로퍼티를 추가할 수 있는지 여부를 반환

- 모든 객체는 기본적으로 새로운 프로퍼티를 추가할 수 있지만, preventExtentions() 메소드를 사용하여 새로운 프로퍼티를 추가할 수 없도록 설정한 경우에는 추가가 불가능하다

var day = new Date(); // Date 객체를 생성함.
// 객체 day에 새로운 프로퍼티를 추가할 수 있는지 검사함.
document.write(Object.isExtensible(day) + "<br>"); // true
 
// 해당 객체에 새로운 프로퍼티를 추가할 수 없도록 설정함.
var myDay = Object.preventExtensions(day);
document.write(Object.isExtensible(day));          // false

 

 

> toString()

- 이 메소드를 호출한 객체의 값을 문자열로 반환

var arr = [10, "문자열", true]; // 배열
var bool = false;               // 불리언
function func() { return 0; }   // 함수
arr.toString();  // 10,문자열,true
bool.toString(); // false
func.toString(); // 함수의 소스 코드가 전부 문자열로 반환됨.

 

 

> valueOf()

- 특정 객체의 원시 타입(primitive type)의 값을 반환

- 자바스크립트에서 원시 타입 값이 기대되는 곳에 객체가 사용되면, 내부적으로 valueOf() 메소드를 호출한다

- 어떤 객체가 원시 타입의 값을 가지고 있지 않으면 객체 자신을 반환한다

function func(n) {
    this.number = n;
}
myFunc = new func(4);
document.write(myFunc + 5); // (1) : [object Object]5
 
func.prototype.valueOf = function() { // valueOf() 메소드를 정의함.
    return this.number;
}
document.write(myFunc + 5); // (2) : 9

- (1) myFunc가 자바스크립트 내부적으로 해당 객체의 valueOf() 메소드를 호출하여 객체 자신을 반환한 후, 문자열 결합 연산을 수행한다

- (2) 내부적으로 호출된 valueOf() 메소드가 해당 객체의 number 프로퍼티 값을 반환한 후, 산술 연산을 수행한다

 

 

> getter

- 특정 프로퍼티의 값을 받아오기 위한 메소드

var gildong = { age: 18 };
document.write(gildong.age + "<br>"); // 18
 
Object.defineProperty(gildong, "americanAge", { get: function() { return this.age - 1; } });
document.write(gildong.americanAge); // 17

- 객체에 프로퍼티를 추가할 때 get 키워드를 사용하여 getter 메소드를 정의하고 있다

- 해당 프로퍼티를 참조할 때, 내부적으로 미리 정의한 getter 메소드가 자동으로 호출될 것이다

 

 

> setter

- 특정 프로퍼티의 값을 설정하기 위한 메소드

var gildong = { age: 18 };
gildong.age = 20;
document.write(gildong.age + "<br>"); // 20
 
Object.defineProperty(gildong, "changeAge", { set: function(n) { this.age = this.age - n; } });
gildong.changeAge = 5;
document.write(gildong.age); // 15

- 객체에 프로퍼티를 추가할 때 set 키워드를 사용하여 setter 메소드를 정의하고 있다

- 해당 프로퍼티의 값을 변경하려고 할 때, 내부적으로 미리 정의한 setter 메소드가 자동으로 호출될 것이다

 

 

 

 

 

 

 

 

[참고자료] http://tcpschool.com/javascript/intro

 

728x90
저작자표시 비영리 (새창열림)

'JavaScript' 카테고리의 다른 글

[JavaScript] 자바스크립트 객체(object) (2) : 상속, 프로토타입, this 키워드, 삭제, 순회, 비교  (0) 2021.08.03
[JavaScript] 자바스크립트 객체(object) (1) : 참조 및 생성  (0) 2021.08.03
[JavaScript] 자바스크립트 함수(function) (2) : 미리 정의된 전역 함수  (0) 2021.08.03
[JavaScript] 자바스크립트 함수(function) (1) : 정의, 유효범위, 호이스팅, arguments, 디폴트 매개변수  (0) 2021.08.03
[JavaScript] 자바스크립트 배열(array) : 생성 및 활용  (1) 2021.08.03
'JavaScript' 카테고리의 다른 글
  • [JavaScript] 자바스크립트 객체(object) (2) : 상속, 프로토타입, this 키워드, 삭제, 순회, 비교
  • [JavaScript] 자바스크립트 객체(object) (1) : 참조 및 생성
  • [JavaScript] 자바스크립트 함수(function) (2) : 미리 정의된 전역 함수
  • [JavaScript] 자바스크립트 함수(function) (1) : 정의, 유효범위, 호이스팅, arguments, 디폴트 매개변수
s_ih_yun
s_ih_yun
  • s_ih_yun
    CODESYUN
    s_ih_yun
  • 전체
    오늘
    어제
    • 분류 전체보기 (339) N
      • Web (8)
      • Java (7)
      • Spring (19) N
      • Git (16)
      • MyBatis (1)
      • HTML & CSS (14)
      • JavaScript (11)
      • DevOps (4)
      • Cloud (8)
      • Lanuage (13)
        • C++ (3)
        • Python (10)
      • DB (1)
        • MySQL (1)
        • Oracle (2)
      • Computer Science (26)
        • Concept (3)
        • Algorithm (23)
      • Baekjoon (104)
        • 단계별로 풀어보기 (78)
      • CodeUp (98)
        • Python 기초 100제 (98)
      • Programmers (2)
      • Books (3)
      • etc (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

    • Syun's Pages
  • 인기 글

  • 태그

    db
    aws
    C
    Tistory
    CodeUp 기초 100제
    Programmers
    BOJ
    java
    codeup
    oracle
    myBatis
    단계별로 풀어보기
    CSS
    HTML
    c++
    spring
    VS Code
    알고리즘
    clean code
    Python
    SourceTree
    자료구조
    git
    web
    JavaScript
    웹
    MySQL
    github
    Cloud
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
s_ih_yun
[JavaScript] 자바스크립트 객체(object) (3) : Object 객체와 Object.prototype 객체의 메소드
상단으로

티스토리툴바