Есть ли консолидированный способ написания нескольких функций-прототипов для одного объекта? - PullRequest
1 голос
/ 08 февраля 2011

У меня есть около восьми функций-прототипов для объекта Date. Я хотел бы избежать повторения Date.prototype. Есть ли консолидированный способ написания нескольких функций-прототипов для одного объекта?

Я пытался безрезультатно:

Date.prototype = {
  getMonthText: function(date){
    var month = this.getMonth();
    if(month==12) month = 0;
    return ['JAN','FEB','MAR','APR','MAY','JUN','JUL','AUG','SEP','OCT','NOV','DEC'][month];
  },
  getDaysInMonth: function(date){
    return 32 - new Date(this.getFullYear(), this.getMonth(), 32).getDate();
  }
};

1 Ответ

2 голосов
/ 08 февраля 2011

Как вы делаете, вы заменяете прототип своим новым объектом.

Если вы используете jQuery, у него есть метод $ .extend, который вы можете использовать как $.extend(Date.prototype, { getMonthText: function(date){...}, getDaysInMonth: function(date){...} })

Если вы не используете, вы можете легко создать функцию, подобную расширению, с помощью:

function extend(proto,newFunctions) {
   for (var key in newFunctions)
       proto[key] = newFunctions[key]
}

И позвоните по номеру:

extend(Date.prototype,{ getMonthText: function(date){...},  getDaysInMonth: function(date){...} });

Другой способ - просто сделать это напрямую:

Date.prototype.getDaysInMonth = function(date){ ... }
Date.prototype.getMonthText = function(date){ ... }

Я бы сказал, что это более читабельно, чем функция расширения.

...