Лучшие практики для «абстрактных» функций в JavaScript?

Я просто написал некоторый код JavaScript, который следует вместе с тем, что я считаю хорошей практикой для создания объект с закрытием и некоторыми функциями:

var myStuff = (function() {
 var number = 0;
 var fn = {};
 fn.increment = function() { number++; };
 fn.decrement = function() { number--; };
 fn.getNumber = function() { return number; };
 return fn;
})();

myStuff.increment();
myStuff.increment();
alert(myStuff.getNumber()); // alerts '2'

У меня нет проблем с написанием кода, подобного предыдущему фрагменту. Я хотел бы написать код с функциональностью, аналогичной «абстрактному» классу ООП. Вот результат моих усилий:

var myStuff = (function () {
var number = 0;
var fn = {};
fn.increment = function () { number++; };
fn.decrement = function () { number--; };
fn.doSomethingCrazy = function () { throw new Error('not implemented'); }; // I want to specify later what this does.
fn.doSomethingCrazyTwice = function () { fn.doSomethingCrazy(); fn.doSomethingCrazy(); };
fn.getNumber = function () { return number; };
return fn;
})();

myStuff.doSomethingCrazy = function () { this.increment(); this.increment(); };
myStuff.doSomethingCrazyTwice();
alert(myStuff.getNumber()); // alerts '4'

Приведенный выше фрагмент кода работает, но не кажется изящным. Возможно, я пытаюсь заставить JavaScript (функциональный язык) делать то, для чего он не предназначен (наследование объектов)

Что является хорошим способом определить объект в JavaScript, чтобы функция этого объекта могла быть определена позже?

19
задан Daniel Allen Langdon 19 September 2011 в 21:22
поделиться