当obj是一个函数时,“键入obj”?

时间:2011-05-26 03:42:42

标签: javascript

我是JavaScript新手,所以我对以下语法感到困惑:

if (isFunction(obj)){
  for (key in obj) {
    //do something
  }
 }

如果isFunctiontypeOf obj=="function"方法将返回true。但是当key in obj是函数时,obj会发生什么?

4 个答案:

答案 0 :(得分:4)

JavaScript函数也是对象,这意味着它们可以具有属性。你可以这样做:

var f = function () {};
f.a = "foo";
f.b = "bar";

如果objf,那么for循环将以key "a""b"进行迭代。

基本上,for in循环遍历对象的所有属性,除了那些内部标记为不可枚举的属性(主要是内置方法和属性)。

答案 1 :(得分:4)

for..in循环遍历obj的可枚举属性。函数是对象,它们具有自己的属性以及来自[[prototype]]链的继承属性。见ECMA-262§12.6.4。

另外,不要忘记声明应保留在本地的变量。

要仅解决obj上的可枚举属性而不是其继承的可枚举属性,通常包含 hasOwnProperty 测试:

for (var key in obj) {
  if (obj.hasOwnProperty(key)) {
    // key is enumerable property of obj, not inherited
  }
}

答案 2 :(得分:1)

函数也可以具有属性, - 以下代码有效:

var foo = function() { }
foo.prop1 = 1;
foo.prop2 = "hello";

for (key in obj)循环将枚举prop1和prop2。

答案 3 :(得分:1)

这是一个jsfiddle(不确定这是否有帮助)http://jsfiddle.net/FEAzV/