免责声明:(1)我的背景是Java / C#,我上周才开始深入研究JavaScript. (2)我知道_.mixin()方法.
这不是项目关键,而是我无法在Javascript中了解对象继承.
例如,尝试使用_.keyFilter函数(我意识到我可以使用map来实现类似的东西)来扩充underscore.js,以返回满足评估函数的键列表.我可以用_.mixin()方法实现结果:
_.mixin({ filterKey : function(obj,iterator,context) {
var results = [];
if (obj == null) return results;
_.each(obj,function(value,index,list) {
if (iterator.call(context,value,list)){
results[results.length] = index;
}
});
return results;
}});
但是,我不确定为什么我不能简单地在我的脚本文件中使用以下内容来增加下划线:
_.keyFilter = function(obj,context) {
var results = [];
if (obj == null) return results;
each(obj,list) {
if (iterator.call(context,list)) results[results.length] = index;
});
return results;
};
这样做,然后尝试调用它:
_.chain(myList).keyFilter(evalFunction);
我得到以下异常:
'Uncaught TypeError: Object [object Object] has no method 'keyFilter'
注意,当我将它放入underscore.js的源代码时,上述方法确实有效.
那么我尝试在我的脚本文件中使用原型(我仍然没有完全掌握):
var keyFilter = _.prototype.keyFilter = function(obj,list)) results[results.length] = index;
});
return results;
};
但这引发了同样的例外. (我认为下面的var被提升到了剧本的顶部,这就是为什么我也尝试了这个以及上面的传递分配).
非常感谢解释.