Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Обновление объекта Date (сокращение кода) (https://javascript.ru/forum/dom-window/41298-obnovlenie-obekta-date-sokrashhenie-koda.html)

HJ90 07.09.2013 19:26

Обновление объекта Date (сокращение кода)
 
Здравствуйте!

Чтобы получить актуальное время - нужно каждый раз вызывать объект Date.
Но я пишу плагин, где на каждый атрибут есть отдельные функции, с соответствующими методами (getHours, getMinutes).
И не очень то грамотно получается в каждой функции копипастить d = new Date();

Выглядит вот так:
plugin.registerattribute("minutes", "", function(){d = new Date(); minutes = d.getMinutes(); return minutes} );
plugin.registerattribute("seconds", "", function(){d = new Date(); seconds = d.getSeconds(); return seconds} );

Как вариант можно написать отдельную функцию со всеми методами и с одной строкой d = new Date();
Но тогда любой атрибут будет гонять все методы в холостую. Вот так:

plugin.registerattribute("minutes",  "", function(){time(); return minutes} );
plugin.registerattribute("seconds",  "", function(){time(); return seconds} );

function time()
	{
		d = new Date(); 
		  hours    = d.getHours(); 
		  minutes  = d.getMinutes();
		  seconds  = d.getSeconds();
	}

Подскажите пожалуйста есть ли грамотный способ обойтись без копипаста и чтобы все оптимизировано было?
Как-то странно Date устроен.

Спасибо!

danik.js 07.09.2013 19:30

Цитата:

Сообщение от HJ90
Как-то странно Date устроен.

Интересный вывод ))
А почему бы просто не new Date().getMinutes() ?

HJ90 07.09.2013 20:31

Спасибо danik.js

А как можно вернуть результат функции при такой записи?
оно без return не работает:
plugin.registerattribute("seconds",  "", function(){new Date().getSeconds(); });

получается только так, ...а короче уже невозможно?
plugin.registerattribute("seconds",  "", function(){sec = new Date().getSeconds(); return sec});

Цитата:

Интересный вывод
Потому что d = new Date(); делает ссылку на объект Date(); а не копию объекта.
Соответственно результат имел бы браться уже с переменной d без повторного присвоения.
Ну по крайней мере я так думаю...

danik.js 07.09.2013 20:54

HJ90 учи основы, ты даже синтаксис не знаешь.
function() { return new Date().getSeconds() }
Цитата:

Сообщение от HJ90
Потому что d = new Date(); делает ссылку на объект Date(); а не копию объекта.

Date - это конструктор, а не тупо объект. new Date() создает новый экземпляр "класса" Date

HJ90 07.09.2013 20:58

danik.js Спасибо за помощь!


Часовой пояс GMT +3, время: 22:26.