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

问题描述

| 我对JavaScript非常陌生,因此对以下语法感到困惑:
if (isFunction(obj)){
  for (key in obj) {
    //do something
  }
 }
如果
typeOf obj==\"function\"
,则
isFunction
方法将返回true。但是,当
obj
一个函数时,如果您说
key in obj
会发生什么?     

解决方法

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
  }
}
    ,JavaScript函数也是对象,这意味着它们可以具有属性。您可以执行以下操作:
var f = function () {};
f.a = \"foo\";
f.b = \"bar\";
如果
obj
f
,则
for
循环将以with13ѭ为with14ѭ和
\"b\"
进行迭代。 基本上,“ 16”循环遍历对象的所有属性,但内部标记为不可枚举的属性除外(大多数是内置方法和属性)。     ,函数也可以具有属性,-以下代码有效:
var foo = function() { }
foo.prop1 = 1;
foo.prop2 = \"hello\";
for (key in obj)
循环将枚举prop1和prop2。     ,这是一个jsfiddle(不确定是否有帮助)http://jsfiddle.net/FEAzV/