只遍历出JScript对象的expando属性
2005-06-24 18:02
239 查看
我们知道JScript的对象(不只是Object)可以像html元素对象一样,添加任意的自定义属性值。也就是说JScript的对象,天生都是Key/Value map。并且这种map结构由于使用Native的代码实现,检索效率非常之高,我曾在这篇文章里讨论过。不过在遍历这样的map时,expando导入属性和prototype导入属性存在了混淆。
由于JScript的prototype特性对对象的扩充非常的方便,所以我们在制作一些JScript类库的时候,一般都会使用prototype特性为对象添加方法,比如我们对Object进行如下prototype扩充:
Object.prototype.Clone = function() {};
Object.prototype.Call = function() {};
Object.prototype.OtherMethod = function(){};
这个时候如果再使用Object作为map结构来使用,我们就会遇到遍历这个map的错误,看下面的代码:
var objMap = {};
objMap['abc'] = '1.abc';
objMap['def'] = '2.def';
objMap['ghi'] = '3.ghi';
objMap['jkl'] = '4.jkl';
遍历这个集合:
function DisplayMap(map)
{
var values = [];
for ( var key in map )
{
values.push(map[key]);
}
return values;
}
Display(objMap);
我们发现,在values里的值居然是:function(){},function() {},function() {},1.abc,2.def,3.ghi,4.jkl。真是郁闷function GetExpandoValues(map)
{
var values = [];
var obj = new map.constructor();
for ( var key in map )
{
if ( obj[key] !== map[key] )
{
values.push(map[key]);
}
}
return values;
}
GetExpandoValues(objMap);
获得结果为:1.abc,2.def,3.ghi,4.jkl
。
Object.prototype.Clone = function() {};
Object.prototype.Call = function() {};
Object.prototype.OtherMethod = function(){};
var objMap = {};
objMap['abc'] = '1.abc';
objMap['def'] = '2.def';
objMap['ghi'] = '3.ghi';
objMap['jkl'] = '4.jkl';
Display All Expand Attributes Display Expando Attributes
function DisplayMap(map)
{
var values = [];
for ( var key in map )
{
values.push(map[key]);
}
return values;
}
function GetExpandoValues(map)
{
var values = [];
var obj = new objMap.constructor();
for ( var key in map )
{
if ( obj[key] !== map[key] )
{
values.push(map[key]);
}
}
return values;
}
由于JScript的prototype特性对对象的扩充非常的方便,所以我们在制作一些JScript类库的时候,一般都会使用prototype特性为对象添加方法,比如我们对Object进行如下prototype扩充:
Object.prototype.Clone = function() {};
Object.prototype.Call = function() {};
Object.prototype.OtherMethod = function(){};
这个时候如果再使用Object作为map结构来使用,我们就会遇到遍历这个map的错误,看下面的代码:
var objMap = {};
objMap['abc'] = '1.abc';
objMap['def'] = '2.def';
objMap['ghi'] = '3.ghi';
objMap['jkl'] = '4.jkl';
遍历这个集合:
function DisplayMap(map)
{
var values = [];
for ( var key in map )
{
values.push(map[key]);
}
return values;
}
Display(objMap);
我们发现,在values里的值居然是:function(){},function() {},function() {},1.abc,2.def,3.ghi,4.jkl。真是郁闷function GetExpandoValues(map)
{
var values = [];
var obj = new map.constructor();
for ( var key in map )
{
if ( obj[key] !== map[key] )
{
values.push(map[key]);
}
}
return values;
}
GetExpandoValues(objMap);
获得结果为:1.abc,2.def,3.ghi,4.jkl
。
Object.prototype.Clone = function() {};
Object.prototype.Call = function() {};
Object.prototype.OtherMethod = function(){};
var objMap = {};
objMap['abc'] = '1.abc';
objMap['def'] = '2.def';
objMap['ghi'] = '3.ghi';
objMap['jkl'] = '4.jkl';
Display All Expand Attributes Display Expando Attributes
function DisplayMap(map)
{
var values = [];
for ( var key in map )
{
values.push(map[key]);
}
return values;
}
function GetExpandoValues(map)
{
var values = [];
var obj = new objMap.constructor();
for ( var key in map )
{
if ( obj[key] !== map[key] )
{
values.push(map[key]);
}
}
return values;
}
相关文章推荐
- 只遍历出JScript对象的expando属性
- 只遍历出JScript对象的expando属性
- 获取JScript对象的expando属性的方法
- 遍历对象所有属性(json对象)
- 遍历json 对象的属性并且动态添加属性
- jquery动态遍历Json对象的属性和值
- as3遍历对象所有属性的方法
- PHP var_dump遍历对象属性的函数与应用代码
- 采用表达式树(Expression Tree)对一个对象的属性进行“遍历”
- js中遍历对象的属性和值
- 遍历一个对象的属性名称和值到map中,然后进行URL地址的拼接
- 遍历JavaScript对象的所有属性(js反射机制)
- 【转】C#怎么遍历一个对象里面的全部属性?
- 对象属性的遍历(二)
- Microsoft JScript 运行时错误 对象不支持此属性或方法
- 代码 - 通过反射对象属性进行遍历赋值
- 遍历JS对象的属性
- js 递归遍历对象、数组、属性
- Js遍历对象中的属性
- JavaScript遍历对象属性