Javascript 在主干网中共享相同功能的最佳方式
我目前的情况是:对于Javascript 在主干网中共享相同功能的最佳方式,javascript,backbone.js,mixins,Javascript,Backbone.js,Mixins,我目前的情况是:对于主干.Collection(但也应该是主干.Model),我以这种方式扩展类(1)。 我想分享的功能如下: 1) startPolling和stopPolling应该是可从所有主干网集合和最终主干网模型访问的公共方法 2) executepoll和onFetch应该是私有方法 在所有Backbone.Collection/Backbone.Model之间共享startPolling和stopPolling的最佳方式是什么 我的想法是创建一个新文件utils/backbone.
主干.Collection
(但也应该是主干.Model
),我以这种方式扩展类(1)。我想分享的功能如下:
1)
startPolling
和stopPolling
应该是可从所有主干网集合和最终主干网模型访问的公共方法2)
executepoll
和onFetch
应该是私有方法
在所有Backbone.Collection/Backbone.Model
之间共享startPolling
和stopPolling
的最佳方式是什么
我的想法是创建一个新文件utils/backbone.polling.js
(2)。这是个好办法吗
(一)
(二)
您可以扩展集合原型,将公共方法添加到您拥有的每个集合中(如果您确实需要它的话)。在其他情况下,您可以使用此方法创建自己的构造函数(第一种方法) 对于provate方法,您也可以这样做,只需开始它们是带下划线的名称:
_.extend(Backbone.Collection.prototype, {
_executePolling: function() {},
_onFetch: function() {}
});
这种命名方法的方式表明这是一个私有方法
如果您想在模型中使用它们,可以扩展模型原型或创建模型的新构造函数,如上面的示例所示。如果这些函数是相同的(希望不是),则可以提供指向函数的链接,而不是函数本身的链接
var bar = function() {};
_.extend(Backbone.Model.prototype, {
foo: bar
});
_.extend(Backbone.Collection.prototype, {
foo: bar
});
因此,当您更改条形图功能时,它将在模型和集合中更改。您可以扩展集合原型,将公共方法添加到您拥有的每个集合中(如果您在任何地方都真正需要它)。在其他情况下,您可以使用此方法创建自己的构造函数(第一种方法) 对于provate方法,您也可以这样做,只需开始它们是带下划线的名称:
_.extend(Backbone.Collection.prototype, {
_executePolling: function() {},
_onFetch: function() {}
});
这种命名方法的方式表明这是一个私有方法
如果您想在模型中使用它们,可以扩展模型原型或创建模型的新构造函数,如上面的示例所示。如果这些函数是相同的(希望不是),则可以提供指向函数的链接,而不是函数本身的链接
var bar = function() {};
_.extend(Backbone.Model.prototype, {
foo: bar
});
_.extend(Backbone.Collection.prototype, {
foo: bar
});
因此,当您更改bar函数时,它将在模型和集合中更改。对于私有方法,据我所知,我不记得javascript提供了一种将对象中的属性设置为“私有”的方法。我能想到的唯一方法是,使“private”方法只能从它们所使用的方法中使用
startPolling: function () {
this.polling = true;
this.minutes = 2;
var self = this;
var executePolling = function() {
// Do something
};
var onFetch = function() {
// Do something
};
executePolling();
},
但是,通过这种方式,您无法从函数中的函数动态访问对象属性(它们只是在创建时保存状态中的值)(链接到展示这种现象)。如果要访问最新的对象属性值,则必须将函数公开。我认为一个好的约定是只使用一个前导下划线来命名“private”函数,以表示它们是私有的(比如\u executepoll
和\u onFetch
)
至于最好的分享方式。一个好看的解决方案可以是这样的:
var WestCoastCustoms= {
// Declare your stuff here
};
var Collection = Backbone.Collection.extend(WestCoastCustoms);
var Model = Backbone.Model.extend(WestCoastCustoms);
一个实用的小提琴例子
希望这有帮助 对于私有方法,据我所知,我不记得javascript提供了一种在对象中使属性“私有”的方法。我能想到的唯一方法是,使“private”方法只能从它们所使用的方法中使用
startPolling: function () {
this.polling = true;
this.minutes = 2;
var self = this;
var executePolling = function() {
// Do something
};
var onFetch = function() {
// Do something
};
executePolling();
},
但是,通过这种方式,您无法从函数中的函数动态访问对象属性(它们只是在创建时保存状态中的值)(链接到展示这种现象)。如果要访问最新的对象属性值,则必须将函数公开。我认为一个好的约定是只使用一个前导下划线来命名“private”函数,以表示它们是私有的(比如\u executepoll
和\u onFetch
)
至于最好的分享方式。一个好看的解决方案可以是这样的:
var WestCoastCustoms= {
// Declare your stuff here
};
var Collection = Backbone.Collection.extend(WestCoastCustoms);
var Model = Backbone.Model.extend(WestCoastCustoms);
一个实用的小提琴例子
希望这有帮助 尽管@Flops和@jake的方法非常优雅,但一个非常简单的方法可能是拥有一个纯JS-utils库,如:
// code simplified and no tested
App = {};
App.Utils = {};
App.Utils.startPolling: function () {
this.polling = true;
this.minutes = 2;
this.executePolling();
},
var MyCollection = Backbone.Collection.extend({
startPolling: App.Utils.startPolling;
});
尽管@Flops和@jake的方法非常优雅,但一个非常简单的方法可能是拥有一个纯JS utils库,如:
// code simplified and no tested
App = {};
App.Utils = {};
App.Utils.startPolling: function () {
this.polling = true;
this.minutes = 2;
this.executePolling();
},
var MyCollection = Backbone.Collection.extend({
startPolling: App.Utils.startPolling;
});