Objejct 객체에 있는 메서드를 정리하면 다음과 같습니다.
메서드 이름 | 설명 |
constructor() | 객체의 생성자 함수를 나타냅니다. |
hasOwnProperty(name) | 객체가 name 속성이 있는지 확인합니다. |
isPrototypeof(object) | 객체가 object의 프로토타입인지 검사합니다 |
propertyIsEnumerable(name) | 반복문으로 열거할 수 있는지 확인합니다. |
toLocaleString() | 객체를 호스트 환경에 맞는 언어의 문자열로 바꿉니다. |
toString() | 객체를 문자열로 바꿉니다. |
valueOf() | 객체의 값을 나타냅니다. |
var obj = { property : 273};
var output ='';
output += "HOP('property') :"+ obj.hasOwnProperty('property') +'\n';
output += "HOP('constructor') :"+obj.hasOwnProperty('constructor')+'\n';
output += "PIE('property') :"+obj.propertyIsEnumerable('property')+'\n';
output += "PIE('constructor') :"+obj.propertyIsEnumerable('constructor')+'\n';
console.log(output);
for(var key in obj){
console.log(obj[key]);
}
HOP('property') :true
HOP('constructor') :false
PIE('property') :true
PIE('constructor') :false
273
먼저 object에는 property라는 속성은 존재하지만 constructor라는 속성은 존재하지 않는다.
또한 property는 반복문으로는 열거가 가능하지만 constructor는 존재하지않으므로 열거할 수 없다.
var object = new Object();
console.log(object);
console.log(object.toString());
var student = {
name: '윤명월',
grade: '대학교 1학년',
toString: function(){
return this.name + ' : '+ this.grade;
}
};
console.log(student);
{}
[object Object]
{ name: '윤명월', grade: '대학교 1학년', toString: [Function: toString] }
원래 모든 객체는 toString() 메서드를 갖는데 다시 선언했으므로 재선언한 것입니다. 자바 스크립트는 객체를 문자열로 변환할 때 자동으로 toString() 메서드를 호출한다고 했으므로 그림 8-8 처럼 출력합니다.
자료형 구분
var numberFromLiteral = 273;
var NumberFromObject = new Number(273);
var output = '';
output += '1. ' + typeof (numberFromLiteral) + '\n';
output += '2. ' + typeof (NumberFromObject);
console.log(output);
1. number
2. object
두 변수 모두 숫자지만 생성자 함수로 만든 숫자는 객체이므로 이러한 결과가 나옵니다.
이러한 특성 때문에 자료형 검사에 문제가 발생합니다.
var numberFromLiteral = 273;
var NumberFromObject = new Number(273);
if(typeof (numberFromLiteral) == 'number'){
console.log('numberFromLiteral을 숫자입니다.');
}
if(typeof(numberFromObject) == 'number'){
console.log('numberFromObject는 숫자입니다.')
}
numberFromLiteral을 숫자입니다.
두 변수 모두 숫자지만 생성자 함수로 만든 숫자는 객체이므로 경고창을 출력하지 않습니다. 이러한 두 대상을 같은 자료형으로 취급하고 싶을 때는 constructor() 메서드를 사용해야합니다.
var numberFromLiteral = 273;
var numberFromObject = new Number(273);
if(numberFromLiteral.constructor == Number){
console.log('numberFromLiteral을 숫자입니다.');
}
if(numberFromObject.constructor == Number){
console.log('numberFromObject는 숫자입니다.');
}
numberFromLiteral을 숫자입니다.
numberFromObject는 숫자입니다.
객체의 생성자 함수가 Number 생성자 함수인지 비교하면 쉽게 숫자인지 구분할 수 있습니다. 다른 자료형도 마찬가지입니다.
모든 객체에 메서드 추가
Object 객체는 모든 자바스크립트 객체의 최상위 객체입니다. 따라서 Objejct 객체의 프로토타입에 속성 또는 메서드를 추가하면 모든 객체에서 활용할 수 있습니다.
Object.prototype 객체에 test() 메서드를 추가합니다. 이렇게 메서드를 추가하면 자바스크립트의 모든 객체에 test() 메서드를 사용할 수 있습니다.
Object.prototype.test = function(){
console.log(this);
};
var number = 273;
number.test();
[Number: 273]
'언어 > javascript' 카테고리의 다른 글
javascript : String (0) | 2020.12.15 |
---|---|
javascript : Nmuber 객체 (0) | 2020.12.15 |
javascript : 기본자료형 (0) | 2020.12.15 |
javascirpt : 클래스 선언과 속성 (0) | 2020.12.15 |
javascript : prototype, constructor (0) | 2020.12.14 |