2015-12-20 5 views
0

Внизу, options.min==1969. Идентификатор хотел бы сделать новую дату, используя options.min, а затем на эту дату вызывать одну из следующих функций даты: .getFullYear(), .getMonth(), .getDay(), .getHours(), .getMinutes().Как я могу вызвать функцию, сохраненную в одном объекте на другом объекте по имени?

Какая функция вызывается на новую дату, должны зависеть от величины options.type

Я хотел бы сделать это как можно короче и избежать повторного кода в if и switch заявления.

Это моя попытка сделать эту работу:

 var options = { 
 
     dateFunctions: { 
 
     years: "getFullYear", 
 
     months: "getMonth", 
 
     days: "getDate", 
 
     hours: "getHours", 
 
     minutes: "getMinutes" 
 
     }, 
 
     type: 'days', 
 
     min: '1969-01-02 10:00:00' 
 
    }; 
 

 
    console.log('before: ' + options.min); 
 

 
    options.min = new Date(options.min)[options.dateFunctions[options.type]] 
 

 
    console.log('after: ' + options.min);

Я ожидаю, призывающую options.min = new Date(options.min)[options.dateFunctions[options.type]] быть эквивалентно вызову new Date('1969-01-02 10:00:00').getDate()) и options.min быть установлен в 1.

Вместо options.min установлен в function getDate() { [native code] }

Что мне нужно изменить, чтобы получить результат функции, вызываемой на options.min вместо самой функции?

+0

Лицо, проголосовавшее за закрытие: Пожалуйста, сообщите, что неясно об этом вопросе, спасибо. – DelightedD0D

+0

На самом деле вызовите функцию, поместив '()' в конец, вы просто ссылаетесь на нее. – SmokeyPHP

ответ

1

Функция не называлась:
Попробуйте прямой путь:

options.min = new Date(options.min)[options.dateFunctions[options.type]](); 

или через call метод

Date.prototype[options.dateFunctions[options.type]].call(new Date(options.min)); 
+0

Возможно, у вас есть опечатка в прототипе. '' – Louy

+0

@Louy, вы правы. Я исправил это. благодаря – RomanPerekhrest

1

There are two ways to access properties in an object. Точечная нотация и обозначение кронштейна. Вероятно, вы ищете последнего.

val = object[function_name](); 

I.e. Просто добавьте круглые скобки в конце, чтобы вызвать функцию после доступа к ней.

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