Javascript.RU

Аксессоры

Описание, примеры

Операторы-аксессоры предоставляют доступ к свойствам объекта.

Объект представляет собой обычный ассоциативный массив (словарь, хэш). Ключами этого массива являются имена свойств и методов (свойств, являющихся ссылкой на функцию).

Есть два способа доступа к свойствам: запись с точкой или с квадратными скобками.

Запись с точкой

Пример: запись с точкой
get = object.property // получить свойство property
object.property = set  // записать свойство property

Для записи с точкой название свойства должно быть правильным javascript-идентификатором, то есть последовательностью английских букв и цифр, включая подчеркивание "_" и знак доллара "$", которая не начинается с числа.
Например, object.$1 - корректный идентификатор, а object.1 - нет.

document.createElement('pre')

В этом примере из объекта document получено свойство createElement, которое является ссылкой на функцию. Эта функция вызвана с аргументом 'pre' в контексте объекта document.

Запись с квадратными скобками

Пример: квадратные скобки
get = object[property_name] // получить
object[property_name] = set  // записать

Здесь property_name - строка. Она не обязательна является правильным идентификатором. Может быть любое значение, включая цифры и даже " " (пробел).

document['createElement']('pre')

Этот пример делает в точности то же самое, что и аналогичный предыдущий.

Использование eval

В старых javascript-скриптах иногда используется доступ к свойствам объекта через eval, в то время как гораздо быстрее и правильнее использовать запись с квадратными скобками.

Например, часто попадается такая запись:

Пример: устаревшая запись
x = eval('document.form_name.' + strFormControl + '.value')

Следует максимально избегать вызова eval. Лучше использовать скобочную запись:

Пример: скобочная запись
x = document.form_name[strFormControl].value

См. также


Автор: jetli13, дата: 8 июля, 2010 - 10:45
#permalink

По поводу eval.
Можно ли обойтись без него в такой ситуации:

function Obj()
{
  this.firstFucn = function()
  {
    return 'yo';
  }

  this.secondFunc = function()
  {
    return 'yo2';
  }
}

var obj = new Obj();
var functions = ['first', 'second'];

eval('obj.' + functions[0] + 'Func()');
eval('obj.' + functions[1] + 'Func()');

Автор: Sweet, дата: 18 августа, 2010 - 00:59
#permalink

Конечно, можно:

var obj = {
  firstFunc: function(){
    return 'yo'
  },
  secondFunc: function(){
    return 'yo2'
  }
}, functions = ['first', 'second']
obj[functions[0]+'Func']()
obj[functions[1]+'Func']()

Автор: Дзен-трансгуманист, дата: 15 июля, 2012 - 16:06
#permalink

Хороший перевод, спасибо. Кому интересно - оригинал статьи здесь.


Отправить комментарий

Приветствуются комментарии:
  • Полезные.
  • Дополняющие прочитанное.
  • Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
    Для остальных вопросов и обсуждений есть форум.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.
Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешены HTML-таги: <strike> <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <u> <i> <b> <pre> <img> <abbr> <blockquote> <h1> <h2> <h3> <h4> <h5> <p> <div> <span> <sub> <sup>
  • Строки и параграфы переносятся автоматически.
  • Текстовые смайлы будут заменены на графические.

Подробнее о форматировании

CAPTCHA
Антиспам
4 + 7 =
Введите результат. Например, для 1+3, введите 4.
 
Поиск по сайту
Реклама
Содержание

Учебник javascript

Основные элементы языка

Сундучок с инструментами

Интерфейсы

Все об AJAX

Оптимизация

Разное

Дерево всех статей

Последние комментарии
Последние темы на форуме
Forum