Когда мне нужны общие функции для нескольких объектов, вот шаблон, который я обычно использую (настроенный для учета представленного вами кода):
var Widget = (function($) {
var pubs = Widget.prototype;
// Private variable -- global to all instances
var someVar;
// The constructor
function Widget(options) {
var privateInstanceVar;
this.privateInstanceFunc = function() {
return privateInstanceVar;
};
}
// Private functions -- global to all instances
function somePrivateFunction() {
}
// Define the public members
pubs.init = function() {
};
pubs.someFunction = function() {
};
return Widget;
})(jQuery);
Использование:
var w = new Widget({someOption: "here"});
Каквы можете видеть, что вы можете обмениваться личными данными среди всех экземпляров, созданных конструктором, и, если вы действительно этого хотите, вы можете иметь личные данные, которые доступны только определенным функциям select instance.Эти функции должны быть созданы в конструкторе, который имеет последствия повторного использования, тогда как функции, которым не нужны действительно частные данные экземпляра, могут находиться в прототипе и, следовательно, совместно использоваться всеми экземплярами.
Еще лучше,поскольку у вас уже есть удобная функция определения объема, вы можете помочь вашим инструментам помочь , присвоив вашим публичным функциям настоящие имена:
pubs.init = Widget_init;
function Widget_init() {
}
Я в основном не кодирую вышесказанное, посколькуЯ определил вспомогательную фабрику, которая делает ее немного более лаконичной (и упрощает специализацию функциональности, например, Car
наследование функциональности от Vehicle
); подробности здесь .