оцените такой подход создания классов
Сабж. Насколько такой подход уместен в JS? Какие могут быть проблемы?
var popupObject = { // URL обработчика url: null, // Данные для запроса data: {}, // Функция, которая будет выполнена в случае выполнения запроса success: function(data, textStatus, jqXHR){ // Пустая функция, не надо сюда ничего писать }, /** * Конструктор объекта. * * @param string url путь к обработчику запроса * @param object data данные для запроса * @param function success функция, которая выполнится в случае выполнения запроса * @return object this */ constuctor: function(url, data, success){ this.url = url; this.data = data !== undefined ? data : this.data; this.success = success !== undefined ? success : this.success; return this; }, /** * Основной метод, выполняющий запрос, прорисовывающий данные из ответа и * исполняющий метод success */ run: function() { $j.ajax({ type: "POST", url: this.url, data: this.data, cache: false, context: this, success: function(data, textStatus, jqXHR){ if (data.status.toLowerCase() === 'ok') { this.embed(data); this.success(data, textStatus, jqXHR); } else { if (window.console && window.console.log) { // console.log(data); } } } }); }, /** * Метод, выполняющий вставку данных из ответа куда-либо. * В нашем случае - в попап. * Данный метод можно перегрузить и вставлять данные куда угодно, в любое мето в DOM-дереве. * * @param array data response данные */ embed: function(data) { var unique_id = 'unique_' + this.rand(); var full_id = unique_id + '_for_popup'; $j('<div id="' + full_id + '" style="display:none"></div>').appendTo('body').append(data.content); openStaticPopup(unique_id); $j('#' + full_id).remove(); }, rand: function() { return Math.floor(Math.random() * 1000); } }; |
Василий Б., и как этим пользоваться?
|
danik.js,
success = function(data){ // функция исполнится после успешного выполнения ajax запроса, аналог success в API jQuery } var popup = popupObject.constuctor('/ajax/popup_delivery.php', {id: 123}, success); popup.run(); // или popupObject.constuctor('/ajax/popup_delivery.php', {id: 123}, success).run(); типа того. просто как пример класса, что он делает - не так уж и важно (получает html из json и рендит его либо в попап, либо в любое место в DOM структуре). Меня просто интересовало, подобный подход чем-то отличается от подхода, когда мы объявляем функцию со свойствами и методами через this, вот так: function foo() { this.var1 = 123; this.bar = function(){ // do } } |
А каким боком это класс? Как можно создать два экземпляра этого класса?
|
ага, ща допишем...
|
Цитата:
создавать экземпляры нельзя, но вот наследовать его можно : var popupMastaa = Object.create(popupObject); вуаля, у нас есть новый объект, прототипом которого является popupObject. |
Вот только нафига метод constructor. Какой же это конструктор.
|
melky,
а что должно быть в create методе? Чисто так, для любопытства спрашиваю.. Назначить прототипом Object мой объект popupObject? Цитата:
/** * Конструктор объекта. * * @param string url путь к обработчику запроса * @param object data данные для запроса * @param function success функция, которая выполнится в случае выполнения запроса * @return object this */ constuctor: function(url, data, success){ this.url = url; this.data = data !== undefined ? data : this.data; this.success = success !== undefined ? success : this.success; // Поскольку в JS нет классов, то мы создаем копию данного объекта (this) // и возвращаем его, что бы иметь возможность создавать несколько экземпляров объекта popupObject. var o = new Object(); for (var i in this) { if (this.hasOwnProperty(i)) { o[i] = this[i]; } } return o; }, и это работает, я пробовал создать два класса с разными параметрами. Ура! Только я от не понял одного - я пытался изначально написать код клонирования объекта так: var o = new Object(); for (var i in this) { if (this.hasOwnProperty(i)) { console.log(i + ' ' + this.i); } } вот что мне выдало в консоли: Цитата:
this.i- undefined. В упор не понимаю, почему так происходит. По идее, в i у меня содержится имя свойства. Почему я через точку не могу получить доступ к свойствам? |
Цитата:
Цитата:
Вопрос - с какой целью ты пытаешься изобрести классы? Ради экспериментов? Или свято веришь что что-то изобретешь новое? Или просто не знаешь основ JS и пытаешься по не знанию создать свой велосипед? Цитата:
|
Цитата:
что значит постоянно изменяться? я создаю отдельный объект с какими-то свойствами. с помощью клонирования объекта я могу создать два разных объекта, у них разные свойства. это то, что мне нужно - эмуляция классов. Вопрос - с какой целью ты пытаешься изобрести классы?ради удобства разработки. да я и не пытаюсь изобрести классы. |
Часовой пояс GMT +3, время: 17:00. |