Сны в стиле JavaScript
Как то задумал изложить некотрые вещи которые мне понравились в JavaScript, однако до сих пор даже эта статья оказалась незавершенной, отчасти что несмотря на простоту я еще не нашел тот один единственный путь создания скрипров на JavaScript. Возможно такой и никогда не будет найден.
Сон первый: классы и объекты
Сон о том как в JavaScript можно создавать объекты и классы и как с ними работать.
Итак приступим...
JavaScript это мощный язык программирования, сочетающий в себе простоту и наличие последних новомодных средств, таких как объектно-ориентированное программирование, обработка исключительных ситуаций и т.п. Правда, несмотря на всю свою мощь в этом языке не предусмотрено средств для работы с вводом-выводом, средств создания пользовательского интерфейса, словом, всего того, что необходимо для создания законченных приложений. Но это не являэтся его недостатком. JavaScript был создан только для одного – для создания эффективных интерпретируемых сценариев. С этой своей задачей он справляется очень хорошо.
Для создания пользовательского интерфейска вполне можно использовать другие приложения, например Internet Explorer или любой другой браузер со встроенной поддержкой DHTML и XML DOM. Причем это не единственный способ создания полнофункциональных приложений, но, на мой взгляд, он является наиболее простым.
Работая в области интернет технологий постоянно сталкиваешся с различными скриптами, написанными на этом замечательном языке, написанными так, словно бы автор специально запутывал логику работы программы, делая невозможным что либо в ней понять или использовать для себя. Отчасти, возможно так оно и есть. Ведь не каждому хочется, чтобы его труд, которому он посвятил много дней и ночей был кем то использован... Мы пойдем другим путем, попытаемся сделать наш код простым и понятным, что бы не нужно было работать "много дней и ночей". Давайте работать быстро. Возьмем за установку – мы пишем просто и понятно, чтобы программу, кторую мы написали мог понять потом только один человек – мы сами. Возможно этот же код можло будет потом использовать повторно в других приложениях, а это уже будет огромная экономия времени и сил.
Для работы нам понадобиться Интернет Эксплорер (хотя вы можете использовать другой браузер, который вам нравится, это ваше дело, но мы будем использовать именно этот редактор). Итак создаем наше первую страничку с которой все и начнется:
<!DOCTYPE
HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html>
//здесь будет наш скрипт... //--> </script> </head>
<body> </body> </html>
JavaScript это объектный язык, не объектно-ориентированный, в нем нет настоящих объектно-ориентированныых средств, таких как наследование, ограничение бласти видимости и т.п., хотя наследование вполне можно в этом языке эмулировать добиваясь того же самого результата при помощи прототипов, но это уже совсем другая история...
Все вокруг – объекты
Три способа создания функций
первый способ:
function F1(){ alert("Функция, созданная первым способом!"); }
второй способ
F1 = function(){ alert("Функция, созданная вторым способом!"); }
третий способ
F1 = new Function("alert("Функция, созданная вторым способом!");")
несмотря на то, что первый способ кажется более простым и привычным первый синтаксис в JavaScript является меннее удобным по сравнению со вторым способом, т.к. Второй способ возвращаят пременную содержащую ссылку на вновь созданную функцию, что удобно при написании объектно-ориентированных программ а также обработчиков событий. Третий способ может быть использован, когда мы не знаем как будет выглядить тело функции на этапе запуска программы или оно может меняться в зависимости от обстаятельств.
Два способа создания объектов
Объкты создаются двумя способами:
при помощи конструктора
/**
* Это конструктор, в сущности, любая функция может * являться
конструктором, если перед ее вызовом поставить new */ function Funk1(){
this.name = "Это будет имя нашего объекта" } //теперь собственно создаем
екземпляр объекта obj = new Func1(); при помощи фигурных скобок: obj = {
name:"Это будет имя нашего объекта" }
оба способа дают один и тот же результат, однако в первом способе при использовании одного конструктора можно создать несколько разных объектов в то время как при помощи второго способа объект создается сразу.
Создание методов
в принципе методы можно создавать по разному, ничто не мешает нам сначала создать функцию, а потом присвоить ее в конструкторе объекта (для любителей Си++)
function Funk1(){ this.prototype.method = Funk1_method; } function Funk1_method(){ alert(); }
мне нравится такой способ (для любителей Java):
function Funk1(){ this.method = function(){ alert(); } }
еще я часто встречаю такой способ (наверно для мазохистов, т.к. Все и так работает, если вы знаете, зачем нужно присваивать функцию прототипу, объясните мне):
function Funk1(){ } Funk1.prototype.method = function(){ alert(); }
методы можно присваивать на этапе работы программы, когда объект уже создан:
function Funk1(){ } var obj = new Funk1(); obj.method = function(){ alert(); }
правда в этом случае метод будет определен только для этого объекта.
Оператор delete
Этот оператор используется не совсем так как скажем с Java, C++ или дурегих аналогичных языках. Оперетор delete используется для удаления свойств объекта, в том числе свойств функций.
Оператор instanceof
Позволяет узнать является ли данный объект объектом данного типа.
Волшебный typeof.
Первый наш код будет таким:
function wind(){ } alert(typeof(wind));
В результате выполнения нашего кода – получаем сообщение:
значит wind – это такая же переменная как и все остальные, давайте подробнее изучим эту переменную. Из документации мы узнаем, что в JavaScript существует встроенный объект называемый Function – не с ним ли мы имеем дело? Объект Function имеет несколько свойств первое что находим свойство arguments
alert(typeof(v.arguments));
Получаем:
ага, значит это все таки объект Function.
var wind = new cWind(); alert(typeof(wind));
Ага, значит cWind – это объект типа функция а переменная wind, которой присвоили результат выполнения оператора new – это уже объект! Причем
alert(wind);
Дает нам: