JavaScript中enumerable function的定义及相关疑问解析
嘿,这个问题抓得很准!其实“enumerable function”这个表述并没有绝对统一的定义,得结合上下文来看,但结合你提到的Backbone场景,主要有两种常见理解:
可被遍历的函数:
我们知道enumerable property是对象中能被for...in、Object.keys()这类方法枚举到的属性。如果某个函数是对象的属性,并且这个属性的enumerable标记设为true,那它就可以被称为“enumerable function”——简单说就是能被遍历到的函数属性。
比如在Backbone里,你给Model或Collection扩展自定义方法时,如果没特意设置enumerable为false,这个方法就会成为可枚举的函数,在遍历对象属性时会被拿到。而Backbone的一些内置核心方法(比如Model的get、set)通常会被设为不可枚举,避免遍历的时候干扰业务逻辑。执行遍历操作的函数:
另一种情况是,把专门用来遍历对象可枚举属性的工具函数叫做enumerable function。比如Underscore(Backbone依赖的工具库)里的_.each,当它遍历对象时,默认只处理可枚举属性;还有Backbone内部可能封装的一些遍历对象属性的工具函数,也可能被泛称为enumerable function。
结合你提到的Backbone文章里的内容(为Web应用赋予结构、模型与集合的能力),实际开发里遇到的“enumerable function”大概率是以上两种情况之一,具体得看它出现的代码上下文来判断。
内容的提问来源于stack exchange,提问作者JoeTidee

