Возможность писать асинхронный код через async / await, которая появилась в Javascript начиная с версии ES2017, безусловно упрощает процесс разработки и понимания написанного другими кода. Давайте рассмотрим одну неочивидную особенность поведения такой программы. Читать далее
Архив рубрики: Javascript
Шпаргалка по операторам сравнения и преобразованию типов в JS
Тема сравнения значений и тесно переплетенная с ней тема приведения типов относятся к самой фундаментальной области знаний для программистов на Javascript, без этих знаний будет легко допустить ошибки, и в каких-то моментах поведение программы может показаться нелогичным. Эта тема — такой же фундамент, как и тема функций и ООП в JS, о которых я уже писал цикл статей (кстати, надо бы сесть и обновить их, привести к текущим реалиям языка). Итак, постараюсь изложить максимально коротко, насколько это позволяют важность темы и подводные камни языка. Читать далее
Проблемы с установкой npm-пакетов под Windows
В unix-мире все проще: обычно у вас в системе уже установлен компилятор gcc, поэтому даже если какие-то пакеты требуют компиляции — обычно все проходит гладко.
Windows — другое дело. Читать далее
Функции в javascript. Оглавление
Наконец-то дописал цикл уроков (всего их 4), которые, я надеюсь, смогут помочь начинающим javascript-программистам или имеющим опыт программирования на других языках быстро освоиться в тонкостях и «красивостях» языка javascript. Старался писать максимально лаконично, больше пояснять примерами, нежели словами, будем надеяться, доступность изложения от этого не пострадала. Итак, собственно, оглавление:
Ну и в качестве бонус-трека — старая статья «Сортировка полей объектов в JavaScript (проблема в Chrome и Opera)«, можете почитать, вдруг пригодится.
Функции в javascript. Урок 4. Прототипы
Оглавление цикла уроков по функциям в javascript.
Как я уже оговорился в предыдущем уроке, вновь создаваемый объект не совсем пустой, у него есть, например, поле __proto__ (доступное явно не во всех браузерах), которое содержит ссылку на прототип этого объекта. Прототип — это тоже некий объект, который приходит на помощь, когда у нашего объекта нет полей и методов, нужных нашей программе. По сути, через прототипы в javascript реализуется механизм наследования. Как же задать прототип? Очень просто — через свойство prototype функции-конструктора:
1 2 3 4 5 6 7 8 9 10 |
function Constructor () {} Consructor.prototype = { test: function () { alert("Test"); } }; var obj1 = new Constructor(); var obj2 = new Constructor(); obj1.test(); // выведет "Test" obj2.test(); // тоже выведет "Test" |
Функции в javascript. Урок 3. Конструкторы
Оглавление цикла уроков по функциям в javascript.
В предыдущем уроке мы разобрали, на что же ссылается this внутри функций. В этом уроке мы продолжим данную тему, но сначала поговорим об объектах.
Как известно, javascript является объектно-ориентированным языком, однако, в отличие от многих других языков, в нем нет никаких классов вообще. Как же создать объект? Первый способ — задать объект с помощью литерала. Причем, мы можем задавать имена полей с помощью любых символов:
1 2 3 4 5 6 7 8 9 |
var obj = { text: "Test", "It's a method!": function () { alert(this.text); } }; alert(obj.text); // тут ничего сложного obj["It's a method!"](); // так можно вызвать метод obj.It's a method!(); // так недопустимо, синтаксическая ошибка |
Функции в javascript. Урок 2. Ключевое слово this
Оглавление цикла уроков по функциям в javascript.
Как я уже писал в предыдущем уроке: функции в javascript — это объекты, такие же, как, скажем, массивы. Их можно присваивать переменным или полям других объектов, можно у них создавать поля и задавать любое их содержимое (someFunc.field = «value»), можно передавать в качестве параметров при вызове других функций. Да, отличие функций от других объектов — их можно вызывать, передавая какие-то параметры. Но есть также небольшое отличие от других популярных языков программирования: в javascript функции не просто вызываются, а явно или неявно применяются к неким объектам.
Формально вызов функции выглядит следующим образом:
1 |
someFunc.apply(someObj, [param1, param2, ...]); |
или, что то же самое, но параметры передаются не массивом, а через запятую:
1 |
someFunc.call(someObj, param1, param2, ...); |
Функции в javascript. Урок 1. Основы
Оглавление цикла уроков по функциям в javascript.
Правильное понимание механизма работы функций в javascript — одно из самых важных качеств, необходимых опытным программистам на этом языке.
Варианты объявления функции
Обычно начинающие javascript-программисты пишут определение функции таким образом:
1 |
function someFunc () { ... } |
Но функции в Javascript — это объекты, а любые объекты можно присваивать переменной, в случае функции это может выглядеть так:
1 |
var someFunc = function () { ... }; |
Сортировка полей объектов в JavaScript (проблема в Chrome и Opera)
Часто объекты в JavaScript используются в качестве заменителей ассоциативных массивов в других языках, таких, как PHP. Например, мы можем передать с сервера в браузер список автомобильных марок в виде пар ключ-значение, где ключами являются id марок в нашей базе, а значениями — названия марок. Скажем, «ассоциативный массив» (он же объект) будет выглядеть так:
1 |
var list = {3: "Audi", 2: "BMW", 1: "Chevrolet"}; |
Теперь выведем содержимое списка с помощью перебора по методу for-in:
1 2 3 |
for (var i in list) { alert(list[i]); } |
И тут проявляются различи между браузерами. Firefox и IE выведут в алфавитном порядке, как мы и задали. А вот Chrome и Opera отсортируют поля объекта в порядке возрастания ключа и выведут в данном случае в обратном порядке. Как же быть?
Функции в Javascript
Статья была слегка исправлена и серьезно дополнена и теперь доступна по новому адресу: Функции в javascript. Урок 1. Основы