Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 创建两个函数来统计对象属性/方法_Javascript - Fatal编程技术网

Javascript 创建两个函数来统计对象属性/方法

Javascript 创建两个函数来统计对象属性/方法,javascript,Javascript,这是我创建的第一个函数。任务是创建两个函数,一个只计算属性,另一个计算属性和方法。(将计数限制为原始对象,我还需要将函数添加到对象原型中,以便我创建的每个对象都有两个函数作为属性自动可用。) 那么我如何做第二个函数呢?(你能看看我的第一个函数,看看我在第一个函数中是否做错了什么吗?) 多谢各位 属性和方法的数量: Object.size = function(obj){ var size = 0, key = ""; for(key in obj){ if(obj.hasOwn

这是我创建的第一个函数。任务是创建两个函数,一个只计算属性,另一个计算属性和方法。(将计数限制为原始对象,我还需要将函数添加到对象原型中,以便我创建的每个对象都有两个函数作为属性自动可用。)

那么我如何做第二个函数呢?(你能看看我的第一个函数,看看我在第一个函数中是否做错了什么吗?)
多谢各位

属性和方法的数量:

Object.size = function(obj){
var size = 0, key = "";
   for(key in obj){
      if(obj.hasOwnProperty(key)){
        size++;
      }
   }
  return size;
}
物业数目:

Object.keys(obj).length

可以返回对象[#属性、#方法、#非方法属性]的数组, 或者只返回所需的索引-

#test used by underscore.js
function isMethod(obj, func) {
    return !!(obj.func && obj.func.constructor && obj.func.call && obj.func.apply);
}

function num_properties(obj){   
    var size = 0;
    for(key in obj){
        if (!isMethod(obj, key)){
            size++;
        }
    }
    return size;
}

返回Object.key(obj.length)“方法”也是属性,属性值恰好是函数。考虑到这一点,短语“计算属性和方法”没有多大意义。也许你想让第一个函数只计算非函数的属性?我也不知道。由于我被要求计算对象中的方法,我不知道如何查找和计算任意对象的方法。请您解释一下“function isMethod”是如何做的?这个函数的目的是排除方法的计数吗?当然,我可以试试。正如您所猜测的,isMethod函数检查给定的obj是否具有给定的函数。我通过检查几件事来做到这一点。首先,它检查obj中是否存在密钥。然后检查键是否具有调用参数(函数的特征)。最后,它检查obj.key是否具有apply参数,这是javascript函数的第二个特征。最后,是!!运算符只是将paren的内容强制转换为布尔值。这是一种黑客,但它的应用相当广泛。它确保返回布尔值。谢谢!非常感谢你!这真的很有帮助!没问题。如果你还有其他问题,请告诉我。这实际上是“道具方法”还是“道具+方法”?非常感谢。第三个索引是所有拥有的属性(道具)减去函数(方法)的数量。
Object.size= function size(obj){
    var props= 0, methods= 0, key;
    for(key in obj){
        if(obj.hasOwnProperty(key)){
            if(typeof obj[key]== 'function')++methods;
            ++props;
        }
    }
    return [props, methods, props-methods];
}