有沒有辦法迭代對象的屬性和方法。我需要寫一個實用功能,像這樣:迭代對象的屬性
function iterate(obj)
{
//print all obj properties
//print all obj methods
}
所以運行此功能:
iterate(String);
會打印:
property: lenght
function: charAt
function: concat...
什麼想法?
有沒有辦法迭代對象的屬性和方法。我需要寫一個實用功能,像這樣:迭代對象的屬性
function iterate(obj)
{
//print all obj properties
//print all obj methods
}
所以運行此功能:
iterate(String);
會打印:
property: lenght
function: charAt
function: concat...
什麼想法?
請參閱我的回答this other question,但無法讀取像這樣的內置屬性。
應該是如此簡單:
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
可以使用for循環迭代對象的屬性。
下面是一個簡單的例子
var o ={'test':'test', 'blah':'blah'};
for(var p in o)
alert(p);
如果財產是一個對象的關鍵? – Buffalo 2017-06-23 15:51:47
這隻有在現代瀏覽器器(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);
}
}
}
似乎運行您的示例工作。 但是當我使用String類時,它沒有返回任何東西。 iterate(String);我也試過: var s =「sss」; iterate(s); – Amir 2009-07-31 21:53:24
當你迭代一個字符串時,它會遍歷每個字符。嘗試傳遞String(s),而不是將字符串包裝在一個對象中。 – devios1 2011-06-24 14:52:14