Почему некоторые имена атрибутов начинаются с двойного подчеркивания в JavaScript? - PullRequest
36 голосов
/ 01 июля 2011

Я вижу, что некоторые атрибуты некоторых объектов в JavaScript начинаются с двойного подчеркивания.Например, что-то вроде __defineGetter__ или __defineSetter__ или __proto__.Это стандартная спецификация ECMAScript?Или, может быть, это просто соглашение в сообществе разработчиков?

Ответы [ 2 ]

30 голосов
/ 01 июля 2011

Это свойства , определенные конкретным браузером. и не определены в ECMAScript .

Поэтому следует избегать конфликта имен ,Если бы они назвали свойство defineGetter, то не было бы никакой гарантии, что код веб-сайта еще не определил свойство с таким же именем - и это вызвало бы много проблем.Однако добавление двух подчеркиваний стало де-факто способом определения специфических свойств браузера (так как некоторые веб-сайты будут использовать это соглашение гораздо реже).

Вы можете заметить, что другие браузеры начинают использовать то же соглашение об именах, что и другиекак использование __proto__), но это все еще не всегда гарантировано для всех браузеров (например, IE не определяет __proto__ property).

Также: соглашение об использовании двух подчеркиваний для «определяемых системой» идентификаторов(в отличие от идентификаторов, определенных программистом) возвращается назад, так что я не знаю, когда это соглашение «началось» - по крайней мере, до C ++ (см. http://en.wikipedia.org/wiki/Name_mangling#Simple_example)

5 голосов
/ 01 июля 2011

Это так, что конфликт имен будет очень маловероятным.

У JavaScript есть проблема с глобальным пространством имен, которое каждый может изменить или получить доступ ко всему.Есть некоторые методы сокрытия данных, но иногда они не будут работать.

Например, если вы сделаете это, ваш jquery перестанет работать:

$ = "somethingElse";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...