2015-03-20 3 views
0

Существует эта функция (обновлено с большим количеством коды):Javascript расширяет то, что возвращается функцией?

openerp.web_calendar = function(instance) { 
    var _t = instance.web._t, 
     _lt = instance.web._lt, 
     QWeb = instance.web.qweb; 

    function get_fc_defaultOptions() { 
     shortTimeformat = Date.CultureInfo.formatPatterns.shortTime; 
     var dateFormat = Date.normalizeFormat(instance.web.strip_raw_chars(_t.database.parameters.date_format)); 
     return { 
      weekNumberTitle: _t("W"), 
      allDayText: _t("All day"), 
      buttonText : { 
       today: _t("Today"), 
       month: _t("Month"), 
       week:  _t("Week"), 
       day:  _t("Day") 
      }, 
      monthNames: Date.CultureInfo.monthNames, 
      monthNamesShort: Date.CultureInfo.abbreviatedMonthNames, 
      dayNames: Date.CultureInfo.dayNames, 
      dayNamesShort: Date.CultureInfo.abbreviatedDayNames, 
      firstDay: Date.CultureInfo.firstDayOfWeek, 
      weekNumbers: true, 
      axisFormat : shortTimeformat.replace(/:mm/,'(:mm)'), 
      timeFormat : { 
       // for agendaWeek and agendaDay    
       agenda: shortTimeformat + '{ - ' + shortTimeformat + '}', // 5:00 - 6:30 
       // for all other views 
       '': shortTimeformat.replace(/:mm/,'(:mm)'), // 7pm 
      }, 
      titleFormat: { 
       month: 'MMMM yyyy', 
       week: dateFormat + "{ '—'"+ dateFormat, 
       day: dateFormat, 
      }, 
      columnFormat: { 
       month: 'ddd', 
       week: 'ddd ' + dateFormat, 
       day: 'dddd ' + dateFormat, 
      }, 
      weekMode : 'liquid', 
      aspectRatio: 1.8, 
      snapMinutes: 15, 
     }; 
    } 
}; 

Я хочу продлить то, что возвращается. Если быть точным, мне нужно month: 'h:mm{ - h:mm}' в timeFormat объект.

В Python я мог бы сделать что-то вроде этого (если возвращение будет словарем):

def some_class(object): 
    def get_fc_defaultOptions(self): 
     ret = super(some_class, self).get_fc_defaultOptions() 
     ret['timeFormat']['month'] = 'h:mm{ - h:mm}' 
     return ret 

Что эквивалентно или подобное в JavaScript?

+0

Должен ли отображаться весь код? Вы могли бы ограничить код, с помощью которого ваша проблема может быть воспроизведена. – thefourtheye

ответ

1

Вы просто присвоить свойства объекта, которые он возвращает:

var obj = get_fc_defaultOptions(); 
obj.timeFormat.month = 'h:mm{ - h:mm}'; 

Или, если вы хотите иметь функцию, которую вы можете позвонить, чтобы сделать это:

function some_class() { 
    var obj = get_fc_defaultOptions(); 
    obj.timeFormat.month = 'h:mm{ - h:mm}'; 
    return obj; 
} 

Использование:

var obj = some_class(); 
console.log(obj.timeFormat.month); // 'h:mm{ - h:mm}' 

(я бы не назвал это some_class, хотя.)

1

Вам нужен новый класс с get_fc_options?

Ну, видя, как get_fc_defaultOptions является основной функцией, вы бы просто сделать ваш класс

function YourClass() { 
    this.get_fc_defaultOptions = function() { 
     var ret = get_fc_defaultOptions(); // This calls the global function 
     // Your code here 
     return ret; 
    } 
} 

var instance = new YourClass(); 

Я надеюсь, что я понять ваш вопрос правильно, на самом деле не должны отвечать на вопросы после того, как будите 26 часов Прямо.

+0

Я вроде как новичок в javascript (так что не знаю, является ли новый класс подходом в js), поэтому я привел пример того, что я буду делать в python для решения такой проблемы. В python я просто наследовал бы от класса, который я хочу изменить (ну, я привел пример 'object', поэтому пусть говорят, что у класса есть этот метод). И тогда я бы перевернул его безопасно с супер расширением того, что поставлено взамен). – Andrius

+0

Да, наследование/расширение немного раздражает в javascript ... Вот почему я предложил свой путь, добавив эту новую функцию (класс), которая вызывает ваш оригинальный метод. – feildmaster

Смежные вопросы