计算对象中的函数数量

时间:2012-10-27 13:54:31

标签: javascript

是否可以计算此JavaScript对象中的函数和属性数:

var Obj = {

    prop1: 'Property1',

    fun1: function() {
        console.log('function 1');
    },
    fun2: function() {
        console.log('function 2');
    }
}

所以对于属性我在这里得到1和2的函数吗?

5 个答案:

答案 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。 prop1fun1fun2 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 );
}