HTML5 [1] |
CSS3 [1] |
JavaScript [3] |
JS in HTML5 [4] |
Canvas (Context2D) [1] |
Canvas (WebGL) [0] |
Browser Technologies [2] |
jQuery [1] |
ExtJS [0] |
Prototype.js [2] |
SVG [2] |
Browsers [2] |
Mozilla Plugins
[0]
XUL, Jetpack, etc.
|
Web [2] |
MeowW [4] |
iOS [0] |
Алгоритмы [0] |
Криптография [0] |
Теория игр [0] |
Теория вероятностей [0] |
Математика [1] |
Мат. анализ [0] |
Алгебра [0] |
Дискретная математика [0] |
Теория графов [0] |
Комбинаторика [0] |
Теория чисел [0] |
Комплексный анализ [0] |
Матлогика
[0]
Математическая логика, её связь с теорией алгоритмов и т.п.
|
Тензоры [0] |
Геометрия [0] |
Топология [0] |
Дифференциальная геометрия [0] |
Дифференциальные уравнения [0] |
16:38:41 ECMAScript 5 - новые возможности объектов |
ECMAScriptПривет). Сегодня мы поговорим про такую штуку, как ECMAScript. Не сомневаясь в ваших знаниях (ага, конечно!), на всякий случай напомню: когда компания Netscape придумала JavaScript, она обратилась к ECMA - чтобы те стандартизировали язык. В результате он получил название ECMAScript. Однако под именем JavaScript он прижился больше. Когда же его называют ECMAScript - значит, говорим про премудрости программирования на нём, про то что написано в стандартах и т.д. Возможно, вы слышали про JavaScript 2.0. Ну или ECMAScript 5 - кому как нравится. Чаще его называют последним названием: ведь речь идёт о стандарте. Да, это новый стандарт любимого JS. О нём мы сегодня и поговорим. ОбъектыСегодня мы будем рассматривать главным образом объекты и их свойства. Итак, существуют два типа свойств объекта - это обычные data-свойства и accessor-свойства. Работа со свойствамиДля работы со свойствами в JavaScript появился целый ворох функций для объектов. Смотрим:
Data-свойстваЧто за звери эти data-свойства? Это наши привычные свойства из JS 1.5. Просто теперь они называются data-свойствами (свойства данных, простые свойства для сохранения данных) - чтобы как-то отличать их от accessor-свойств. И ещё у них появились специальные параметры - их можно указывать последним параметром, создавая через функцию Object.defineProperty (или defineProperties). Свойства такие:
В ECMAScript 5 стало возможным создавать константы не как переменные, а специальным оператором. Точно так же можно записать константу вот так:
А ещё мы можем не создавать объект заранее, а затем расширять, как мы это делали раньше, а создать прямо (ведь функция возвращает изменённый объект):
AccessorsAccessor-свойства (от англ. Access - доступ) - специальные свойства, которые работают малость по-другому, чем обычные. Их тоже можно создать через defineProperty. Они тоже имеют свойства enumerable и configurable, означающие то же самое, но вместо свойств value и writable, у нас есть функции: get и set. Когда мы пытаемся прочитать accessor-свойство, выполняется функция get, а возвращаемое функцией значение передаётся коду как значение свойства. Точно так же мы пытаемся изменить переменную - работает функция set. Вот пример:
Мы можем также сделать вот так:
Получаем дескрипторВопрос: вот мы сделали свойство объекту... А как потом узнать его параметры? Writable, configurable, enumerable? Как узнать значения этих свойств? Здесь нам поможет функция:
Дескриптор - это такой специальный объект, который содержит свойства объекта. В общем, вот пример:
Список свойств объектаМы можем легко получить список свойств объекта с помощью двух функций:
Эти функции возвращают массив с именами свойств объекта. Вот вам пример:
Фиксируем объектВ новом JS есть несколько функций для различных фиксаций, опечатываний и заморозок объекта. Вот: Статика: запрещаем расширение
Опечатывание: запрещаем удаление
Заморозка: запрещаем изменение
ПрототипыОсталось кое-что интересное на закуску. Это прототипы.
Одна интересная вещь. Если мы попытаемся унаследовать от null, объект не будет наследоваться даже от Object, как обычно бывает при создании объекта.
Под конец...Вообще появляется впечатление, что ECMA просто нечего делать. Конечно многие изменения хорошие и полезные, но чётко всё структурировать... Это становится похоже на XHTML, вернее на его худшие части. Нет, чтобы улучшить логику, убрать проблемные места... Оператор typeof на худой случай поправить: чтобы говорил, что строка - это не только '...', но и new String (и то же с Number и Boolean), чтобы опознавал Array, Date и Error (и RegExp забыл)... А я ещё в ECMAScript 6 заглянул: если нигде не ошибся, то там удавиться можно: локальное присваивание придумали. Хотя я наверняка ошибся. |
|
Всего комментариев: 1 | |
| |