您的位置:首页 > Web前端 > JavaScript

获取JScript对象的expando属性的方法

2012-08-23 15:05 288 查看
参考:
只遍历出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,可以获取key以及对应的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>


如果不需要map的key以及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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: