免责声明:(1)我的背景是 Java/C#,我上周才开始深入研究 JavaScript。(2) 我知道 _.mixin() 方法。
这不是项目关键,而是我无法理解 Javascript 中的对象继承。
例如,尝试使用 _.keyFilter 函数来增加 underscore.js(我意识到我可以使用 map 来实现类似的功能)以返回满足评估函数的键列表。我可以使用 _.mixin() 方法实现结果:
除了将函数直接放入源代码之外,_.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, index, list)){
results[results.length] = index;
}
});
return results;
}});
但是,我不确定我是否理解为什么我不能简单地在我的脚本文件中使用以下内容来增加下划线:
_.keyFilter = function(obj, iterator, context) {
var results = [];
if (obj == null) return results;
each(obj, function(value, index, list) {
if (iterator.call(context, value, index, 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, iterator, context) {
var results = [];
if (obj == null) return results;
each(obj, function(value, index, list) {
if (iterator.call(context, value, index, list)) results[results.length] = index;
});
return results;
};
但这引发了同样的异常。(我认为下面的 var 被提升到脚本的顶部,这就是为什么我也尝试使用和不使用上面的传递赋值)。
解释将不胜感激。