获取任何对象的属性和函数列表

时间:2013-02-06 14:22:03

标签: javascript

我想迭代任何类型的javascript对象的属性和函数(在这种情况下为IDBKeyRange)。

我尝试使用以下代码: -

  <script type="text/javascript">
    var arr = Object.getOwnPropertyNames(IDBKeyRange.only(43));
    for(var i=0;i<arr.length;i++) {
    document.write(arr[i]+"</br>");
    }
  </script>

但是,它没有向我显示属性和方法的列表 - 我做错了什么?

2 个答案:

答案 0 :(得分:3)

使用for-in循环:

for(var key in myObject){
    console.log(key, ':', myObject[key]);
}

答案 1 :(得分:0)

Object.getOwnPropertyNames返回的数组,即Object的属性名称。

您必须遍历数组并引用对象:

var O=// an object instance;
var A= Object.getOwnPropertyNames(O).map(function(itm){
    try{
        return itm+':'+O[itm];
    }
    catch(er){
        return itm+': ERROR!'+er.message;
    }
});

alert(A.join('\n'));

如果任何键引用了对象,那么您需要一个递归方法 -

function deepProps(O){
    var arr= Object.getOwnPropertyNames(O).map(function(itm){
        var hoo= O[itm];
        try{
            if(hoo== window){
                return '\n'+itm+': window';
            }
            if(hoo){
                if(hoo.nodeName) return itm+': '+ hoo.nodeName;
                if(typeof O[itm]== 'object'){
                    return '\n\n'+itm+':\n'+deepProps(O[itm]);
                }
                return itm+': '+O[itm];
            }
            return itm+': null';
        }
        catch(er){
            return itm+': '+ 'ERROR! '+er.message;
        }
    })
    return arr.join('\n');
}