我试图理解Backbone Collection findWhere()
函数是如何工作的,我在代码中看到了这一点:
// Return models with matching attributes. Useful for simple cases of
// `filter`.
where: function(attrs, first) {
var matches = _.matches(attrs);
return this[first ? 'find' : 'filter'](function(model) {
return matches(model.attributes);
});
},
// Return the first model with matching attributes. Useful for simple cases
// of `find`.
findWhere: function(attrs) {
return this.where(attrs, true);
},
我试图了解这一部分的作用:
return this[first ? 'find' : 'filter'](function(model) {
return matches(model.attributes);
});
这部分this['find'](function(model){ ... })
实际上做了什么?
答案 0 :(得分:3)
您可以在javascript中使用括号表示法而不是点符号,并且括号表示法在您拥有的情况下非常方便。所以,以下是相同的:
foo.['bar']
foo.bar()
在这一行:
return this[first ? 'find' : 'filter'](function(model) {
如果第一个值返回true,则使用 this.find()
,否则将使用this.filter()
。
答案 1 :(得分:1)
就像这样
this
是Object
[first ? 'find' : 'filter']
检查bool first
是否为正数,然后返回'find'
其他'filter'
,它们是由括号表示法[]
访问的函数引用。简而言之,使用三元运算符来通过bracker表示法访问函数引用。
(...){}
是该函数的调用。 答案 2 :(得分:1)
this['find'](function(model){ ... })
这部分等于:
this.find(function(model){ ... })
所以答案是:对象find
的方法this
是用参数调用的(我假设它是回调:))function(model){ ... }
。
答案 3 :(得分:1)
此
return this[first ? 'find' : 'filter'](function(model) {
return matches(model.attributes);
});
与
相同var functionName = (first ? 'find' : 'filter');
return this[functionName](function(model) {
return matches(model.attributes);
});
与
相同var functionName;
if(first){
functionName = 'find';
} else {
functionName = 'filter';
}
return this[functionName](function(model) {
return matches(model.attributes);
});
与
相同if(first){
return this['find'](function(model) {
return matches(model.attributes);
});
} else {
return this['filter'](function(model) {
return matches(model.attributes);
});
}
与
相同if(first){
return this.find(function(model) {
return matches(model.attributes);
});
} else {
return this.filter(function(model) {
return matches(model.attributes);
});
}
我希望能够清除它。