问题描述
|
我对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/