我从 Backbone 开始,正在编写一个手机销售应用程序。但我的疑问是关于 javascript 执行流程的。
情况是我有一个自定义方法来拒绝我的购物车集合中的重复项,这些方法是这样的:
var Cart = Backbone.Collection.extend({
contains : function(aProduct){
_.each(this.models, function( element, index, list ){
if( element.get('product').get('id') == aProduct.get('id') ){
return true;
}
});
return false;
}
});
该方法检测重复项并尝试返回 true,但该行不是最后一行,因为执行的最后一条语句是“return false”。此时我意识到我对这个 javascript 执行流程有误解。
也许你们中的一个人可以用你的知识启发我
谢谢
最佳答案
您将从传递给 _.each
的函数返回 true。这与您的 contains 函数不同。这是让它发挥作用的方法:
var Cart = Backbone.Collection.extend({
contains : function(aProduct){
var doesContain = false;
_.each(this.models, function( element, index, list ){
if( element.get('product').get('id') == aProduct.get('id') ){
doesContain = true;
}
});
return doesContain;
}
});
但是,更好的方法(假设是 lodash 或下划线)是使用 _.any
var Cart = Backbone.Collection.extend({
contains : function(aProduct){
return _.any(this.models, function( element ){
if( element.get('product').get('id') == aProduct.get('id') ){
return true;
}
});
}
});
关于javascript - 误解 JavaScript 执行流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21342419/