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++;
    }
}

注意 prop1fun1、およびfun2すべて のプロパティですObj。JavaScript のオブジェクト プロパティ値は、文字列だけでなく、任意の値を保持できます。( David の答えは、関数以外のプロパティ数も取得する方法を正しく示しています。)

于 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 に答える