我正在查看网站的模型代码,我对原型有疑问。我知道这对Javascript中的继承很有用。
在这个例子中......
define([], function () {
"use strict";
/**
* Data Model
*
* @type {Backbone.Model}
*/
var DataModel = Backbone.Model.extend({
defaults : {
},
urlRoot : '/api/..../../..',
fetch : function() {
Backbone.Model.prototype.fetch.apply(this, arguments);
}
});
return Datamodel;
});
为什么我们需要Backbone.Model.prototype.fetch.apply(this, arguments);
而不是普通的Model.fetch();
我非常困惑。为什么甚至使用原型来取东西?我无法理解这里的用例。
请帮忙。
答案 0 :(得分:4)
这样做是为了在调用实际的fetch方法之前进行一些预处理。换句话说,我们使用自定义逻辑覆盖模型fetch
方法,如果需要,最终会调用原始的fetch
方法。
例如:
fetch : function(options) {
if(options.someFlag){
var dfd = jQuery.Deferred();
// fetch the data from localStorage
// dfd.resolve(resultingDataFromLocalStorage);
return dfd.promise();
}
return Backbone.Model.prototype.fetch.apply(this, arguments);
}
这比使用代码决定如何在调用model.fetch()
的所有视图中进行提取的代码更好的解决方案。
当然,如果没有自定义逻辑,就像在你的例子中一样,这是非常不必要的。