Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   vanilla.js..... (https://javascript.ru/forum/offtopic/43718-vanilla-js.html)

l-liava-l 17.12.2013 19:43

vanilla.js.....
 
действительно очень легкий и мощный фреймворк!:D
http://s2.ipicture.ru/uploads/20131217/WLxmC3WP.png
http://s2.ipicture.ru/uploads/20131217/doHYgPjn.png

господа, wtf?
Вот суки, меня обманули... негодяи))

Maxmaxmaximus5 17.12.2013 19:54

Даша следопыт

nerv_ 19.12.2013 22:31

Раз уж тема пустует, воспользуюсь случаем и задам вопрос: плохо ли так делать и если да, то почему?
/**
 * NULL IS NEW GLOBAL OBJECT
 */
this.Null = {
    /**
     * Returns "true" if a value is null
     * @param {*} v A value
     * @returns {Boolean}
     */
    isNull: function(v) {
        return v === null;
    }
};



/**
 * UNDEFINED IS NEW GLOBAL OBJECT
 */
this.Undefined = {
    /**
     * Returns "true" if a value is undefined
     * @param {*} v A value
     * @returns {Boolean}
     */
    isUndefined: function(v) {
        return v === undefined;
    },
    /**
     * Returns "true" if a value is defined
     * @param {*} v A value
     * @returns {Boolean}
     */
    isDefined: function(v) {
        return v !== undefined;
    }
};

kobezzza 20.12.2013 00:10

Я просто в глобал спейс добавляю функции вида: isUndef и isNull

l-liava-l 20.12.2013 00:49

Цитата:

Раз уж тема пустует, воспользуюсь случаем и задам вопрос: плохо ли так делать и если да, то почему?
Я бы не стал так писать не очень очевидно(мне) + много когда

А это почти копипаст:
isUndefined: function(v) {
	        return v === undefined;
	    },
	    isDefined: function(v) {
	        return v !== undefined;

Я обычно пилю так
function is(type, variable) {
    return variable === type
}
is(undefined, 10);


Ну или как kobezzza тоже

nerv_ 20.12.2013 01:09

Цитата:

Сообщение от l-liava-l
Я обычно пилю так

массивы как проверять будешь?

Цитата:

Сообщение от kobezzza
Я просто в глобал спейс добавляю функции вида: isUndef и isNull

разумно. С другой стороны есть логика вида
Constructor.IsConstructor(variable);

или
Type.IsType(variable);

и не хочется ее нарушать. Но null & undefined примитивы и не имеют конструкторов. Вместе с тем Number имеет...

Пока в раздумьях :)

Вот так получается https://github.com/nervgh/yum.js/blob/master/src/yum.js

Это "isDefined", конечно, надо убирать, а то взрыв мозга :D

... или сделать как сказал кобеза и добавить в глобал три функции

Цитата:

Сообщение от l-liava-l
А это почти копипаст

и что из этого?

cyber 20.12.2013 01:58

nerv_,
function is(str, obj) {
        
 var type = {}.toString.call(obj).toLowerCase();
     type = type.slice(7);
        

 return type.indexOf(str.toLowerCase()) != -1 && !(obj !== obj);
      
 }
      
      console.log(is("array", []));
      console.log(is("number", 3));
      console.log(is("number", "3"));
      console.log(is("object", undefined));


При желание можно сократить)

Date.isDate = function(v) {
    return is("Date", v);
};

nerv_ 20.12.2013 02:43

cyber, посмотри, сколько у тебя операций, и сколько у меня https://github.com/nervgh/yum.js/blo...rc/yum.js#L210 Как думаешь, есть разница в скорости? :) Кроме того, так я проверяю только объекты https://github.com/nervgh/yum.js/blo...rc/yum.js#L165 , кот. не определяются через typeof

monolithed 20.12.2013 02:50

В большинстве случаев проверка типа объекта решается пересмотром архитектуры.
Может когда-нибудь TC-39 решат добавить перегрузку функций ;)

cyber 20.12.2013 03:00

Цитата:

Сообщение от nerv_
Как думаешь, есть разница в скорости?

не буду отвечать на реторический вопрос)

kobezzza 20.12.2013 12:49

nerv_, разумеется, для тех функций, для которых можно заюзать неймспейс, то его нужно заюзать :)
Object.extend, Math.uid, Number.format

Но для некоторых функций вроде isUndef можно опустить, т.к. они относятся ко всем сущностям.

nerv_ 20.12.2013 15:10

Цитата:

Сообщение от monolithed
В большинстве случаев проверка типа объекта решается пересмотром архитектуры.

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

Цитата:

Сообщение от Дзен-трансгуманист
почему бы не писать так?

Справедливое замечание :) В es5 ввели Array.isArray(). Я решил продолжить традицию

Цитата:

Сообщение от kobezzza
разумеется, для тех функций, для которых можно заюзать неймспейс, то его нужно заюзать
Object.extend, Math.uid, Number.format

Но для некоторых функций вроде isUndef можно опустить, т.к. они относятся ко всем сущностям.

допустим, есть Object.clone() - она клонирует все сущности внутри объекта. Т.е. этот момент спорный. Но, скорее всего сделаю просто глобальными функциями, т.к. эти примитивы не имеют объектных оберток.
По поводу Object.extend. Я бы начал юзать Object.assign из es6 или полифил.

kobezzza 20.12.2013 15:57

Цитата:

Сообщение от nerv_ (Сообщение 288034)
По поводу Object.extend. Я бы начал юзать Object.assign из es6 или полифил.

У него другой принцип работы, менее гибкий, чем нужен мне.
Я использую свою реализацию https://github.com/kobezzza/Collecti...e/obj.jsn#L120, без рекурсий, поэтому работает оч быстро (для меня это было критично).

nerv_ 22.12.2013 01:38

Цитата:

Сообщение от kobezzza
Я использую свою реализацию https://github.com/kobezzza/Collecti...e/obj.jsn#L120, без рекурсий, поэтому работает оч быстро (для меня это было критично).

твой коллекшн крут )

Я запилил функцию сравнения объектов по значению. Периодически требуется, особенно в тестах.


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