Ответ 1
Это свойства , определенные конкретным браузером и не определяемые ECMAScript.
Поэтому name collision следует избегать. Если они вызвали свойство defineGetter
, тогда не было бы гарантии, что код сайта еще не определил свойство с тем же именем - и это вызовет много проблем. Тем не менее, добавление двух символов подчеркивания стало дефактовым способом определения специфических свойств браузера (поскольку гораздо менее вероятно, что какой-то сайт будет использовать это соглашение).
Вы можете заметить, что другие браузеры начинают использовать такое же соглашение об именах, что и другие (например, с помощью __proto__
), но которые все еще не гарантированы для всех браузеров (например, IE не определяет __proto__ property
).
Кроме того: соглашение об использовании двух символов подчеркивания для "определяемых системой" идентификаторов (в отличие от идентификаторов, определяемых программистом) длится долгое время, поэтому я не знаю, когда это соглашение "началось" - по крайней мере, как длинный как С++ (см. http://en.wikipedia.org/wiki/Name_mangling#Simple_example)