декабря 4, 2011 | Published in ClientSide, JavaScript
Сразу оговорюсь о том, что JavaScript не самый удобный язык программирования — в нем много чего сделано неправильно или недоделано, много простейших вещей отсутствует, много неочевидных моментов, например начать программировать на Ruby можно уже через день почитав созданные кропотливым трудом статьи на RubyDev, а для того, чтобы научиться программировать на JavaScript необходимо большее время. Под «научиться программировать» я не подразумеваю умение организовывать архитектуру и создавать большие приложения, но подразумеваю знание синтаксиса и философии языка.
Несмотря на множество недостатков JavaScript — чудесный язык программирования. Если бы не проблемы с кроссбраузерностью и нормальная поддержка браузеров современных стандартов (я о HTML5 JavaScript APIs) то удовольствие от программирования на JavaScript можно было бы сравнить с удовольствием программирования на Ruby.
В этой огромнейшей статье я постараюсь вам поведать об объектах в JavaScript, наследовании на прототипах и прочих вещах, а также познакомить вас с философией языка, точнее с тем, как ее понимаю я. Статья не будет раскрывать тему программирования на JavaScript всецело, я не ставлю целью написание еще одного справочника по языку — это глупо, вместо этого данная статья научит вас понимать то как и почему JavaScript работает так, как работает, как организовать код и т.д. Также оговорюсь, что в статье приводится не кроссбраузерный код, он работает в FireFox и Chrome о том, работает ли он в остальных браузерах я не знаю.
Read the rest of this entry »
мая 18, 2011 | Published in ClientSide, JavaScript
Ранее, в первой части, говорилось о том, что разницы между следующими типами создания функций нету:
function funcName(){};
funcName = function(){};
funcName = new Function();
На самом деле отличия есть, они достаточно незаметны, но знать их необходимо.
function funcName(){} — декларация (объявление) функции;
funcName = function(){} — присвоение переменной выражения — функции;
funcName = new Function(); — конструирование функции.
Read the rest of this entry »
мая 16, 2011 | Published in ClientSide, JavaScript
В прошлой части мы познакомились с функциями в JavaScript, а в этой мы рассмотрим их более подробно опираясь на уже имеющиеся из прошой части RubyDev JavaScript учебника.
Область видимости и контекст выполнения
Для начала поговорим об области видимости переменных в JavaScript. Обычно работу с перемеными описывают в первую очередь и отдельно от функций, однако в нашем случае такой порядок более уместен, поскольку функция — это объект, то есть значение, которое может быть присвоено переменной и доступ к которому может быть произведен через переменную (имя функции и есть переменная). Кроме того, при работе с переменными имеется множество подводных камней, которые составляют проблемы для изучения JavaScript.
Функции — это особые объекты, которые кроме пар свойство — значение могут содержать еще и выполняемый код. Как и любой объект, функция отгораживается от внешнего мира, создает свой собственный маленький мирок, который называется областью видимости или пространством. Переменные объявленные в теле функции являются локальными, то есть они замкнуты в функции, в ее мальньком мирке. При этом областью видимости таких переменных является тело функции, обратиться к ним из вне невозможно! Пример функции с внутренними переменными:
function helloFunction(){
var hello = "Hello!";
alert(hello);
}
helloFunction();//Hello!
alert(hello);//Переменной hello в текущем пространстве вызова alert не существует!
Read the rest of this entry »