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 |