0

我在一个对象中有以下 toString 方法:

/**
         * @method toString
         * @public
         */
        toString: function () {
            var toString = "toString: ";
            for (key in this) {
                if (this.hasOwnProperty(key))   {
                    console.log(key);
                    console.log(this[key].length);
                    if(this[key].length < 50)   {
                toString +=key + ": " + this[key] + " \t ";
                    }
                }
            }
            return toString;
        }

为什么我的函数(有超过 50 个字符的大主体)返回 2/3 的长度?

编辑:我正在尝试获取属性值的长度以将它们划分为属性和函数。

edit2:既然函数对象的长度返回参数的#,那么在js中是否有其他方法来划分属性和函数?

4

1 回答 1

3

对于 Function 对象,length属性表示其形式参数(函数期望的参数)的总数。例如:

var foo = function(a) {};
foo.length; // 1

Function.length注意和之间的区别arguments.length

var bar = function(a, b) { 
  console.log(bar.length); 
  console.log(arguments.length); 
};
bar(42);

这将记录2在第一行(因为形式参数的数量是给定函数的常数值),但1在第二行(bar这里只使用单个参数调用)。


由于函数对象的长度返回参数的#,那么在js中还有其他方法来划分属性和函数吗?

当然:只需检查属性的类型:

if (typeof this[key] === 'function') { ... }
于 2013-10-23T08:02:49.310 回答