Programming/JavaScript

Object

잇나우 2019. 12. 23. 19:56
반응형

자바스크립트에는 Object라고 하는 객체가 따로있다. Object 객체는 모든 객체의 부모 객체라고 부를 수 있는 가장 기본적인 형태를 가지고 있는 객체이다. 모든 객체는 Object 객체를 상속 받는데 그러하기 떄문에 모든 객체는 Object 객체의 prototype 프로퍼티를 가지고있다. 모든 객체가 공통적으로 가지고 있어야 할(하는) 기능이 있다면 Object의 prototype으로 지정하면 된다.

Object.prototype.contain = function(neddle) {
    for(var name in this){
        if(this[name] === neddle){
            return true;
        }
    }
    return false;
}
var o = {'name':'apple', 'city':'seoul'}
console.log(o.contain('apple'));
var a = ['apple','banana','melon'];
console.log(a.contain('banana'));

위 코드는 요구하는 값이 객체와 배열안에 있으면 true 없으면 false로 console.log를 찍어보는 코드인데 Object 객체의 prototype에 contain 이라는 메소드를 설정하였기때문에 각기 다른 객체와, 배열(배열도 객체이다)에서도 contain 메소드에 접근하여 실행 할 수 있는것이다. 하지만 이 방법은 굉장히 위험하다. Object 객체는 함부로 확장하지 않는 것이 바람직한데 그 이유는 모든 객체에 영향을 주기 때문이다.

for(var name in o){
    console.log(name);  
}

위 코드를 실행해보면 결과값에 확장한 프로퍼티인 contain이 포함되어 있다. 이 문제를 해결하기 위해서는 프로퍼티가 해당 객체의 소속인지 체크해 볼 수 있는 hasOwnProperty를 사용해 보는것이다.

for(var name in o){
    if(o.hasOwnProperty(name))
        console.log(name);  
}

hasOwnProperty는 인자로 전달된 속성의 이름이 객체의 속성인지 파악한다. 만약 prototype으로 상속받은 객체(데이터)라면 false가 된다.

반응형

'Programming > JavaScript' 카테고리의 다른 글

복제와 참조  (0) 2019.12.24
데이터 타입  (0) 2019.12.23
표준 내장 객체의 확장  (0) 2019.12.23
Prototype  (0) 2019.12.22
상속(inheritance)  (0) 2019.12.21