Jump to content
  • 0

Враппер для new Date()


Дядя Саша
 Share

Question

Привет, нужно сделать враппер (наследование через прототип не подходит) для new Date().

То есть к примеру мне надо получать дату не так:


var date = new Date();

а вот так:


var date = newMyDate();
function newMyDate() {
var date = new Date();
...
some actions
...
return date;
}

Все это работает до тех пор пока мне не понадобится передать параметры:


var date = newMyDate(alredy_exist_date.getTime());

Теперь в ф-ии newMyDate можно работать с объектом arguments, но как их передать в вызов new Date — непонятно.

У кого нибудь есть идеи? Или эта задача невыполнима?

Link to comment
Share on other sites

14 answers to this question

Recommended Posts

  • 0

Мда, и для чего я распинался...

На самом деле я знаю как передаются параметры функции, я не знаю как внутри этой моей ф-ии передать эти параметры в вызов new Date().

var date = newMyDate(вот те параметры)

function newMyDate(а тут вообще ничего нет потому что параметров может быть разное количесство) {
за то тут есть почти_массив arguments
var date = new Date(их надо передать вот сюда)
return date
}

и хз как с этим быть

Link to comment
Share on other sites

  • 0
Более четко вопросы надо формулировать.

А чем прототипирование не устраивает?

Пасиб, с eval я и сделал :), думалось что есть в жс какой то более прямой способ, увы, все указывает на убогость языка.

С прототипом не катит потому что при каждом получении экземпляра класса прототип прийдется переопределять, это еще пол беды, но может быть ситуация когда работают сразу два экземпляра, они хранят разные данные и получается ппц. Из-за всех таких вот особенностей не захотелось определять прототп и все что мне надо вешать на мой собственный экземпляр.

Link to comment
Share on other sites

  • 0
все указывает на убогость языка.

Нормальный язык, многие ситуации решаются на нем намного изящнее, чем в других языках.

С прототипом не катит потому что при каждом получении экземпляра класса прототип прийдется переопределять, это еще пол беды, но может быть ситуация когда работают сразу два экземпляра, они хранят разные данные и получается ппц. Из-за всех таких вот особенностей не захотелось определять прототп и все что мне надо вешать на мой собственный экземпляр.

Что мешает сделать ветвление внутри метода?

Link to comment
Share on other sites

  • 0

var Calendar = Class.create();
Calendar.prototype = {
initialize: function(field, options, e) {
...
this.options = options;
this.date = field.value === "" ? new Date() : Date.prototype.parseTime(field.value);
...
},

newDate: function() {
    var date ...
...
date.MONTH = $w(this.options.months); // присылается с сервера в вызове каждого нового экхемпляра.
date.YEARS = $R(this.options.years_range[0], this.options.years_range[1]); // аналогично
date.HOURS_INCLUDE = this.options.date_format.indexOf("%H") > 0 ? true : false;
....
    return date;
}
}

<input class="input_button_default" id="date_select_button_cf2134386b36090f5b09624143e6c80922cc1673"
onclick="new Calendar(this, $('edit_start_date'),
{
"months": "January February March April May June July August September October November December",
"minutes_equal": "5",
"weeks": "Monday Tuesday Wednesday Thursday Friday Saturday Sunday",
"years_range": [2009, 2010],
"seconds_equal": "5",
"weekdays": "S M T W T F S",
"select_class": "input_select_default",
"first_day": 0,
"date_format": "%B, %d %Y @ %H:%M",
"hours_equal": "1"
},
event);" style="display: none" type="button" value="Select start Date" />

Да и вся эта информация просто не нужна за пределами моего класса, кто знает сколько еще экземпляров даты будет получаться в документе, зачем каждому этот мусор.

Link to comment
Share on other sites

  • 0

Фигасе... при каждом клике у вас создается новый инстанс, который нифига не содержит изменения в старом...

Нельзя использовать new, лучше написать функцию, которая ноде присваивала бы как поле экземпляр класса, если он еще не создан, или использовала бы его, если уже создан.

Link to comment
Share on other sites

  • 0
Фигасе... при каждом клике у вас создается новый инстанс, который нифига не содержит изменения в старом...

Нельзя использовать new, лучше написать функцию, которая ноде присваивала бы как поле экземпляр класса, если он еще не создан, или использовала бы его, если уже создан.

Так и есть :) вызывается new Calendar(...), есть массив calendars, в нем ведется поиск на наличие существующего, если есть — то он просто немного обновляется (если надо), а если нет — создается новый

http://imagebin.ca/img/2QyWbq86.png — вот тут результат (:

Мда, наверно все равно возвращается целый экземпляр... Ф-ия initialize проверяет на наличие существующего календаря. Мда, задумался я:)

Ну, он не большой, никуда не присваивается и сразу летит в пи..ду. Надо подумать, переделывать лень (:

Link to comment
Share on other sites

  • 0
Да, надо бы проводить поиск в массиве до вызова new Calendar(), это было бы правильно, а так сильно плохо?

Зачем массив и поиск? s0rr0w же написал:

которая ноде присваивала бы как поле экземпляр класса, если он еще не создан, или использовала бы его, если уже создан.
Link to comment
Share on other sites

  • 0

>> Да, надо бы проводить поиск в массиве до вызова new Calendar()

Вроде я это и написал? Или где мне хранить уже созданные календари? Ф-ия ж должна где то искать уже созданные экземпляры, вот они и лежат в массиве (в глобальной переменной calendars). Только реализовано у меня криво, получается. Ибо проверка на существующий инстанс у меня выполняется уже после получения нового (в нем же, в новом и осуществляется), а надо бы вынести ее отдельно.

Но я думаю не забить ли мне на это. Пускай себе создается, памяти что ли жалко, еще и чужой :)

Поэтому и спрашиваю, сильно ли это хреново для такой задачи?

И интересно куда он девается потом, если нигде не используется.

Link to comment
Share on other sites

  • 0
>> Да, надо бы проводить поиск в массиве до вызова new Calendar()

Вроде я это и написал? Или где мне хранить уже созданные календари? Ф-ия ж должна где то искать уже созданные экземпляры, вот они и лежат в массиве (в глобальной переменной calendars). Только реализовано у меня криво, получается. Ибо проверка на существующий инстанс у меня выполняется уже после получения нового (в нем же, в новом и осуществляется), а надо бы вынести ее отдельно.

Но я думаю не забить ли мне на это. Пускай себе создается, памяти что ли жалко, еще и чужой :)

Поэтому и спрашиваю, сильно ли это хреново для такой задачи?

И интересно куда он девается потом, если нигде не используется.

У вас есть инпут, так? Этот инпут должен работать с этим экземпляром класса, так?

Делаете input onclick="initCalendar( this )"

потом

function initCalendar ( node ) {

if( !this._calendar ) this._calendar = new Calendar( ... );

this._calendar.foo().

...

}

Нода всегда будет хранить тот экземпляр класса, который вам нужен.

Link to comment
Share on other sites

  • 0
У вас есть инпут, так? Этот инпут должен работать с этим экземпляром класса, так?

Делаете input onclick="initCalendar( this )"

потом

function initCalendar ( node ) {

if( !this._calendar ) this._calendar = new Calendar( ... );

this._calendar.foo().

...

}

Нода всегда будет хранить тот экземпляр класса, который вам нужен.

Ну да, я все это понял, в ноде не хочу хранить его, хочу в массиве, у календаря то есть ссылка на ноду — this.field, я по ней и нахожу нужный мне календарь... только, правда, не из того места, как оказалось)

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy