是否可以计算此JavaScript对象中的函数和属性数:
var Obj = {
prop1: 'Property1',
fun1: function() {
console.log('function 1');
},
fun2: function() {
console.log('function 2');
}
}
所以对于属性我在这里得到1和2的函数吗?
答案 0 :(得分:6)
var fCount = 0,
pCount = 0;
for ( var i in Obj ) {
if ( Obj.hasOwnProperty(i) ) {
if ( typeof Obj[i] === "function" ) {
fCount++;
} else {
pCount++;
}
}
}
答案 1 :(得分:3)
你走了:
Object.properties_size = function(obj) {
var size = 0, key;
for (key in obj) {
if (obj.hasOwnProperty(key) && !(obj[key] instanceof Function)) size++;
}
return size;
};
Object.functions_size = function(obj) {
var size = 0, key;
for (key in obj) {
if (obj.hasOwnProperty(key) && obj[key] instanceof Function) size++;
}
return size;
};
var prop_size = Object.properties_size(Obj);
var func_size = Object.functions_size(Obj);
答案 2 :(得分:2)
当然,简单:
var numFunctions = 0;
for (var p in Obj)
{
if (Obj.hasOwnProperty(p) && typeof Obj[p] === 'function')
{
numFunctions++;
}
}
N.B。 prop1
,fun1
和fun2
是 Obj
的所有属性。 JavaScript中的对象属性值可以包含任何值,而不仅仅是字符串。 (David's answer正确显示了如何获取非函数属性计数。)
答案 3 :(得分:0)
var count = 0;
for(var fn in Obj)
if(Obj.hasOwnProperty(fn) && Obj[fn] instanceof Function)
count++;
答案 4 :(得分:0)
你可以这样做
var num = 0;
for ( var k in Obj ) {
num += ( Obj[k] && Function == Obj[k].constructor );
}