0

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

var Obj = {

    prop1: 'Property1',

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

所以对于属性,我在这里喊得到 1 和 2 的功能?

4

4 回答 4

6
var fCount = 0,
    pCount = 0;

for ( var i in Obj ) {
    if ( Obj.hasOwnProperty(i) ) {
        if ( typeof Obj[i] === "function" ) {
            fCount++;
        } else {
            pCount++;
        }
    }
}
于 2012-10-27T13:57:50.757 回答
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);
于 2012-10-27T14:11:18.930 回答
2

当然,很简单:

var numFunctions = 0;
for (var p in Obj)
{
    if (Obj.hasOwnProperty(p) && typeof Obj[p] === 'function')
    {
        numFunctions++;
    }
}

注意 prop1, fun1, 和fun2都是属性Obj。JavaScript 中的对象属性值可以保存任何值,而不仅仅是字符串。(大卫的回答正确地显示了如何获得非函数属性计数。)

于 2012-10-27T13:56:28.807 回答
0

你可以这样做

var num = 0;
for ( var k in Obj ) {
    num += ( Obj[k] && Function == Obj[k].constructor );
}
于 2012-10-27T13:58:01.613 回答