TIL-JavaScript(Object)

연시아·2022년 6월 13일
0

TIL

목록 보기
37/51
post-thumbnail

22.06.13

💟 Object

Object 객체는 객체의 가장 기본적인 형태를 가지고 있는 객체입니다. 다시 말해서 아무것도 상속받지 않는 순수한 객체입니다. 자바스크립트에서는 값을 저장하는 기본적인 단위로 Object를 사용합니다.

var grades = {'egoing': 10, 'k8805': 6, 'sorialgi' : 80};

동시에 자바스크립트의 모든 객체는 object 객체를 상속 받는데, 그런 이유로 모든 객체는 object 객체의 프로퍼티를 가지고 있습니다. 또한 object 객체를 확장하면 모든 객체가 접근할 수 있는 API를 만들 수 있습니다.

💞 Object API 사용법

// Object.keys()    --> Object는 생성자 함수
var arr = ["a","b","c"];
console.log(Object.keys(arr));     // keys 함수 인자로 값을 넣는다.
// Object.prototype.toString()    --> Object는 생성자 함수
var o = new Object();
console.log(o.toString());      // 이렇게 사용한다. 
var arr = new Array(1,2,3);
console.log(arr.toString())

프로토타입이 없는 함수는 object.함수(값)처럼 인자로 값을 받아서 사용합니다.
프로토타입이 있는 함수는, 먼저 객체를 만든 다음 객체.함수() 이렇게 사용합니다.
어떠한 메소드가 프로토타입의 소속이라는 것은 생성자 함수를 이용해서 new를 통해 객체를 생성합니다.

💕 Object 확장

Object.prototype.contain = function(neddle){
for(var name in this){     // this는 이 함수를 사용하는 객체를 가리킴.
if(this[name] === neddle){
return true;
}
}
return false;
}
var o = {'name':'egoing','city':'seoul'}
console.log(o.contain('egoing'));
var a = ['egoing','leezche','grapittie'];
console.log(a.contain('leezche'));

이렇게 object 객체를 프로토타입 확장해서 사용하는 방법에는 문제가 있어서 권장하지 않는 방법입니다.

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

다음과 같이 log를 찍어서 보면 위에서 정의한 대로 egoing과 seoul이 출력되는데, 위에서 object 함수에 프로토타입을 사용하여 함수를 정의하였기 때문에 함수도 같이 출력됩니다.
즉, 모든 객체에 영향을 줍니다.
그래서 for in 문을 사용할 때에는 주의해야하는데, object의 hasOwnProperty()함수를 사용하여 생성한 객체가 갖고있는 자신의 프로퍼티만 출력하는 함수를 사용하면 이 문제를 해결할 수 있다.

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

0개의 댓글