JScript 객체의 expando 속성을 가져오는 방법

참조: JScript 객체의 expando 등록 정보만 반복
object에 있는hasOwnProperty 방법은 JScript 대상의expando 속성을 얻을 수 있고 for in을 통해 역대로 실현할 수 있다.코드는 다음과 같습니다.
<script type="text/javascript">
Object.prototype.Clone = function() {};
Object.prototype.Call = function() {};
Object.prototype.OtherMethod = function(){};
Object.prototype.getExpandoNames = function() {
var values = new Array();
var obj = new this.constructor();
for(var i in this) {
  if(obj[i]!=this[i]) {
   values.push(i);
  }
}
return values;
}

var objMap = {};
objMap['abc'] = '1.abc';
objMap['def'] = '2.def';
objMap['ghi'] = '3.ghi';
objMap['jkl'] = '4.jkl';

var exp_names = objMap.getExpandoNames();
document.write("<br>     Expando   ,   prototype   <br>");
for(var i=0;i<exp_names.length;i++) {
   document.write("name: "+exp_names[i]+", value: "+objMap[exp_names[i]]+"<br>");
  }
</script>

hashtable를 모방하려면 키와 대응하는name를 가져오면 이렇게 쓸 수 있습니다.
<script type="text/javascript">
Object.prototype.Clone = function() {};
Object.prototype.Call = function() {};
Object.prototype.OtherMethod = function(){};
Object.prototype.getExpandoValues = function() { 
var values = new Array(); 
var obj = new this.constructor(); 
for(var i in this) { 
  if(obj[i]!==this[i]) { 
   values.push({"name":i, "value":this[i]}); 
   } 
} 
  return values; 
} 

var objMap = {};
objMap['abc'] = '1.abc';
objMap['def'] = '2.def';
objMap['ghi'] = '3.ghi';
objMap['jkl'] = '4.jkl';

//var map_o = objMap['getExpandoValues']();
var map_o = objMap.getExpandoValues();
 document.write("map_o.length: "+map_o.length+"<br>");
 for(var i=0;i<map_o.length;i++) { //   Expando   ,   prototype   
    document.write("name: "+map_o[i].name+", value: "+map_o[i].value+"<br>"); 
  }

//          ,        Expando     prototype   
 for(var item in map_o){
    document.write("key:  "+map_o[item].name+",  map[key]:  "+map_o[item].value +"<br>");
 }

for(var item in objMap){//   Expando     prototype   
   document.write(item+"<br>");
   }
</script>

맵의 키와value가 필요하지 않으면 이렇게 번거롭게 하지 말고hasOwnProperty 속성을 사용하면 됩니다.
<script type="text/javascript">
Object.prototype.Clone = function() {};
Object.prototype.Call = function() {};
Object.prototype.OtherMethod = function(){}; 

function GetExpandoValues(map)
{
    var values = [];
    for ( var key in map )
    {
        if ( map.hasOwnProperty(key) )
        {
            values.push(map[key]);
        }
    }
    return values;
}

var objMap = {};
objMap['abc'] = '1.abc';
objMap['def'] = '2.def';
objMap['ghi'] = '3.ghi';
objMap['jkl'] = '4.jkl';

var b =GetExpandoValues(objMap);
document.write("<br>    hasOwnProperty      <br>b.length:"+b.length);
 document.write("<br>b"+b);
</script>

좋은 웹페이지 즐겨찾기