Проэлектроника

Александр Церковный

Мысли, истории, новости, всё, что меня касается ...

  • Home
    Home This is where you can find all the blog posts throughout the site.
  • Categories
    Categories Displays a list of categories from this blog.
  • Tags
    Tags Displays a list of tags that has been used in the blog.
  • Bloggers
    Bloggers Search for your favorite blogger from this site.
  • Team Blogs
    Team Blogs Find your favorite team blogs here.
  • Login

JavaScript

Здесь я буду писать статьи о скрипте

Posted by on in JavaScript

У меня часто спрашивают, "а что же это?", я тут наткнулся на очень хорошее и краткое объяснение:

Это платформа для запуска JavaScript приложений, это не сервер, это не инструмент, это просто среда.

Hits: 1206
0

 Как сделать выход из родительской функции (return), внутри вложенной функции:

var $break = {};
  
function getElement() {
  
  try {
  
    [1, 2, 3].forEach(function (element) {
  
      if (element % 2 == 0) {
        // "return" из getElement
        alert('found: ' + element); // found: 2
        $break.data = element;
        throw $break;
      }
  
    });
  
  } catch (e) {
    if (e == $break) {
      return $break.data;
    }
  }
  
  return null;
}
  
alert(getElement()); // 2

Здесь ключевая логика в том, что любое исключение порождаемое на любой вложенности, полностью останавливает работу всего дальнейшего скрипта.

Обычно я использую такой путь:

var func = (function () {
    var return_value = 0;

    for (var i = 0; i < 10; i+=1) {
        (function (x) {
            var some_another_value = 0;

            return_value += some_another_value + x;
        })(i);
    }

    return return_value;
})();
 

То есть ключевая логика здесь это return_value

Он более прост в понимании и реализации, но вариант от Сошникова более изящен.

Tagged in: closure javascript scope
Hits: 1026
0
'use strict';

var test = {
    aa : function () {
        var bb = {
            j : function () {
                console.log(this);
            }
        };
        
        function bar () {
            return bb.j;
        }
        
        return bar()();
    }
};

test.aa(); // this === ???

Такой вариант:

'use strict';

var test = {
    aa : function () {
        var bb = {
            j : function () {
                console.log(this);
            }
        };
        
        function bar () {
            return bb.j();
        }
        
        return bar();
    }
};

test.aa(); // this === ???

И последний

'use strict';

var test = {
    aa : function () {
        var bb = {
            j : function () {
                console.log(this);
            }
        };
        
        function bar () {
            return bb.j;
        }
        
        return bar();
    }
};

test.aa()(); // this === ???
Tagged in: javascript scope this
Hits: 3810

Хотел написать статью об ошибках, которые мы часто допускаем в процессе написания кода. Многие из которых заставляют нас копаться очень долго, что бы выяснить в чем причина, а на самом деле причина в "человеческом факторе". Все ошибаются, и мы были бы не люди, если бы не ошибались.

В основном все эти ошибки часто допускаю я при написании кода в принципе в любых условиях (спешу или нет). Хотя казалось бы, они ведь мне известны и стоит обращать внимание, но увы не всегда это выходит.

Порядок пунктов не означает частость повторения.

1) Аргументы (псевдо массив arguments у функций) в неправильном порядке:

;(function () {
	'use strict';

	function make_some_stuff (jquery, bootstrap, backbone, angular, mootools) {
		// Здесь обычно мы пишем уже обращение к аргументам в нашей функции
		// И обычно пишем не отдавая себе отчет в том, что могли перепутать аргументы при вызове функции
		// И это влечет за собой тщательную отладку
	}

	// множество кода, или лоадер необходимых нам библиотек
	// или определение этих библиотек

	make_some_stuff($, back, boot, ang, moot);
})();
Hits: 1405
0

Posted by on in JavaScript

Недавно обнаружил для себя, что циклы очень похожи на инкремент и декремент. Например:

// do ... while - Цикл, описанный, таким образом, сначала выполняет тело, а затем проверяет условие.
// очень похоже на
// Инкремент
++i

Так сложилось в голове ...

Tagged in: do...while
Hits: 891
0

Posted by on in JavaScript

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

О чем же я:

for (var i =1; l = arr.length; i< l; ++i){
    console.log(arr[i]);
}

или

arr.forEach(function(item){
    console.log(item);
});

что лучше?

Tagged in: abstraction javascript
Hits: 987
0

Красивое лучше, чем уродливое.
Явное лучше, чем неявное.
Простое лучше, чем сложное.
Сложное лучше, чем запутанное.
Плоское лучше, чем вложенное.
Разреженное лучше, чем плотное.
Читаемость имеет значение.
Особые случаи не настолько особые, чтобы нарушать правила.
При этом практичность важнее безупречности.
Ошибки никогда не должны замалчиваться.
Если не замалчиваются явно.
Встретив двусмысленность, отбрось искушение угадать.
Должен существовать один — и, желательно, только один — очевидный способ сделать это.
Хотя он поначалу может быть и не очевиден, если вы не голландец.
Сейчас лучше, чем никогда.
Хотя никогда зачастую лучше, чем прямо сейчас.
Если реализацию сложно объяснить — идея плоха.
Если реализацию легко объяснить — идея, возможно, хороша.
Пространства имён — отличная штука! Будем делать их побольше!

Hits: 874
0

Я пока придумал одно решение на событие change у select, что бы взаимодействовать с чем то и декменировать или инкримировать каое то значения, зная текущую сумму ... (нихера наверное никому не понятно, ну да ладно)

В общем при клике мы записываем текущее значение, при change сверяем и собственно декремируем или инкримируем его.

Tagged in: change event select
Hits: 1033
0

Posted by on in JavaScript

Мощный инструмент setTimeout, работает кааак раз после того как освободится поток выполнения функций, очень удобно при взаимодействии после "дом реди".

Hits: 1044
0

Ужасно работает логика работы с элементами после выборки их в DOM. К примеру я выбрал всех детей сделав примерно так:

$$(elem).getChildren()

после этого что бы воспользоваться каким нибудь инструментом получения информации, я ещё должен докопаться до нужного мне элемента, путём выборки через индекс в массиве или другим способом ... это самый не значительный минус.
Есть ещё такой метод как inject как бы альтернатива insertBefore/After но типа более навороченный, так вот при перемещении им что либо куда либо, затераются обработчики. Напомню, что после работы с insertBefore/After обработчики должны оставаться.

И самый ужасный минус - это то, что эта библиотека срёт в DOM своими методами, в итоге получается, что при ошибке работа скрипта останавливается. Напомню, что jQuery "съедает" все ошибки.

Ужасно построена логика фильтра ...

Нет стандартных фич типа:

:visible

Ужасно бесит, когда в официальной документации тебе пишут, что ты можешь просто дополнить библиотеку такими фильтрами ... я не хочу дополнять библиотеку, я хочу использовать её такую, как она есть!

* Дополнение:
Неявно работает выборка, в одних случаях возвращает массив, в других элемент.

** Дополнение:
Не работают некоторые стандартные методы типа erase() - метод удаления атрибута у элемента.

Итог: MooTools ужасно недоработанная библиотека.

Tagged in: javascript mootools
Hits: 1194
0
var some_data = {
	userID: '92800',
	name: 'Ivan'
}
Tagged in: code javascript
Hits: 1083
Joomla 2.5