Идея организации JS данных и методов для работы с ними

Василий М.

Новичок
Возникла идея насчет JS.
С сервера черезх аякс возвращаются объекты данных любой вложенности.
Но поскольку мы кране ООПшны, нам хотелось бы иметь данные и методы работы с ними в одном месте.
Идея такова - пишем объект, содержащий методы для работы с данными корзины - хэлперы, методы форматирования, различные нужные нам вещи.

// Написали методы который можно вызывать как из контекста объекта, так и стандартным методом а-ля функция:

Код:
Helper = {
  inObject: function(value, obj){
     if (obj === undefined) {
       obj = this;
     }

     if (obj.length !== undefined && !obj.length) { // для массивов
       return false;
     }

     for (var key in obj) {
       if (obj.hasOwnProperty(key)) {
         if (obj[key] == value) {
           return key;
         }
       }
     }
  
     return false;
   }
  
    // ещё метод
    getCountElements: function(obj) {
     // ...
    }
}
// Далее делаем инъекцию этих методов в объект данных:
injection(data, Helper);

// Используем:
console.log( data.user.userdata.inObject('[email protected]') ); // email

// Другой полезный метод:
console.log( data.user.getCountElements() );

Единственый минус - это перебор элементов через for(i in data) придется делать с проверкой на то, что typeof data != function.
 

WMix

герр M:)ller
Партнер клуба
в пхп классы тоже данные встраиваешь?
по мне одно дело модель <script> другое данные $.json()
как упрощенная идея
PHP:
var fileref=document.createElement('script')
fileref.setAttribute("type","text/javascript")
fileref.setAttribute("src", 'model.js')
PHP:
// model.js
var model = {
  data: false;
  load: function(){ $.getJSON( "ajax/test.json", function( data ) { this.data = data; } )}
}
 
Последнее редактирование:

Василий М.

Новичок
WMix, в php есть трейты.
в php есть классы.
js позволяет манипулировать методами как свойствами. т.е. отличия от свойства метода в js по факту нет особого. почему нет?
 

AmdY

Пью пиво
Команда форума
js-style будет через расширение прототипа для Object, а не ручное завёртывание, иначе просто inObject(data.user.userdata, '[email protected]') ). Второй вариант правильнее, так как является типичным функциональным конвеером.
 

WMix

герр M:)ller
Партнер клуба
Василий М., так получилось
1. алгоритмы получения алгоритма модели и данных несколько разные
2. в одном случае это достаточно статичный материал, который можно даже отдать браузеру в кэш, другой подразумевает постоянные изменения.
3. одну часть может писать человек далекий от php другую далекий от js
 

Василий М.

Новичок

hell0w0rd

Продвинутый новичок
Василий М., оО вот такой код по твоему плохо?
Код:
var Foo = function (bla) {
    this.bla = bla;
}

Foo.prototype.getBla = function () {
    return this.bla;
}
А вообще мне кажется нормально поддерживать последние две версии браузера - это 10 и 11 IE.
Что за необходимость поддерживать IE аж 8 версии?
 
Последнее редактирование:

Absinthe

жожо
Имелось в виду, что расширение прототипов - не есть хорошо.
Почему?

А вообще мне кажется нормально поддерживать последние две версии браузера - это 10 и 11 IE.
Что за необходимость поддерживать IE аж 8 версии?
Пользователи.
 

hell0w0rd

Продвинутый новичок
Absinthe, ясно что не роботы) я к тому что окупается поддержка 8ie по сравнению с кол-вом пользователей его же?
 

Absinthe

жожо
IE8 - это 9.56% мировых пользователей сейчас.
Проблем с версткой или JavaScript под него не наблюдал.
 
Сверху