[英]iterating an object properties
有没有办法迭代对象属性和方法。 我需要写一个像这样的实用函数:
function iterate(obj)
{
//print all obj properties
//print all obj methods
}
所以运行这个功能:
iterate(String);
将打印:
property: lenght
function: charAt
function: concat...
有任何想法吗?
应该这么简单:
function iterate(obj) {
for (p in obj) {
console.log(typeof(obj[p]), p);
}
}
注意: console.log
函数假设您使用的是firebug 。 此时,以下内容:
obj = {
p1: 1,
p2: "two",
m1: function() {}
};
iterate(obj);
会回来:
number p1
string p2
function m1
在另一个问题中查看我的答案,但你无法阅读这样的内置属性。
这仅适用于现代浏览器 (Chrome,Firefox 4 +,IE9 +),但在ECMAScript 5中,您可以使用Object.getOwnPropertyNames
获取对象的所有属性。 它只需要一些额外的代码来从原型中获取继承的属性。
// Put all the properties of an object (including inherited properties) into
// an object so they can be iterated over
function getProperties(obj, properties) {
properties = properties || {};
// Get the prototype's properties
var prototype = Object.getPrototypeOf(obj);
if (prototype !== null) {
getProperties(prototype, properties);
}
// Get obj's own properties
var names = Object.getOwnPropertyNames(obj);
for (var i = 0; i < names.length; i++) {
var name = names[i];
properties[name] = obj[name];
}
return properties;
}
function iterate(obj) {
obj = Object(obj);
var properties = getProperties(obj);
for (var name in properties) {
if (typeof properties[name] !== "function") {
console.log("property: " + name);
}
}
for (var name in properties) {
if (typeof properties[name] === "function") {
console.log("function: " + name);
}
}
}
您可以使用for循环来迭代对象的属性。
这是一个简单的例子
var o ={'test':'test', 'blah':'blah'};
for(var p in o)
alert(p);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.