본문 바로가기

JAVASCRIPT

object 확장의 위험

object.prototype.contain = function(neddle) {
    for(var name in this){
        if(this[name] === neddle){
            return true;
        }
    }
    return false;
}
let o = {'name':'egoing', 'city':'seoul'}
console.log(o.contain('egoing'));
let a = ['egoing','leezche','grapittie'];
console.log(a.contain('leezche'));

 

이런확장은 모든 객체의 영향을 주기 때 문에 위험합니다.

 

a
["egoing", "leezche","graphttie"]

o
Object = {'name':'egoing', 'city':'seoul', contain:function}
for(let name in o){
	console.log(0[name]);
}

egoing
seoul
function(needle){
	for(let name in this) {
 		   if(this[name]=== needle){
	   return true;
     }
   }
   return false
 }

 

우리가 정의했던 

 function(needle){
for(let name in this) {
     if(this[name]=== needle){
   return true;
     }
   }
   return false
 }

 

함수가 나옵니다. 즉 모든 객체의 영향을 줍니다. 

 

Object.prototype.contain = function(neddle) {
    for(var name in this){
        if(this[name] === neddle){
            return true;
        }
    }
    return false;
}
let o = {'name':'egoing', 'city':'seoul'}
let a = ['egoing','leezche','grapittie'];

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

name 

city

contain이 나왔습니다.

 

왜일까요 ? 

 

우리가 프로토타입으로 추가한 contain까지 나왔습니다.

 

자 그리고 

 

Object.prototype.contain = function(neddle) {
    for(var name in this){
        if(this[name] === neddle){
            return true;
        }
    }
    return false;
}
let o = {'name':'egoing', 'city':'seoul'}
let a = ['egoing','leezche','grapittie'];

for(let name in ){
	if(o.hasOwnProPerty(name)){
	console.log(name);
  }	
}

0,1,2 contain이 나옵니다.

 

Object로 프로토타입으로 메소드를 추가할때 신중하게 하셔야합니다. 모든 객체이 이렇게 영향을 줍니다.

 

사용방법이 하나있습니다.

 

Object.prototype.contain = function(neddle) {
    for(var name in this){
        if(this[name] === neddle){
            return true;
        }
    }
    return false;
}
let o = {'name':'egoing', 'city':'seoul'}
let a = ['egoing','leezche','grapittie'];

for(let name in o){
	if(o.hasOwnProPerty(name)){
	console.log(name);
  }	
}

name

contain이 나옵니다.

 

hasOwnProPerty를 통해서 이객체의 직접적인 소유인 직접적으로 정의된 객체인지를 체크할수 있습니다.

 

그 객체가 상속받은 프로퍼티와 자기자신이 직접 정의한 프로퍼티를 확인하는 시간이였습니다.

 

 

 

이 포스팅은 생활코딩을 보고 만들었습니다. "egoing" 님 감사합니다.

'JAVASCRIPT' 카테고리의 다른 글

참조  (0) 2020.11.25
원시 데이터 타입  (0) 2020.11.19
object 확장  (0) 2020.11.17
Object  (0) 2020.11.13
표준 내장 객체의 확장  (0) 2020.11.10