Хром и JavaScript
Я использую функцию Javascript с именем top на всех страницах, чтобы установить стандартизированный заголовок (почти на 2000 подстраниц). Но это не работает в Chrome. Он утверждает (в консоли), что
- top уже определен (где я пытаюсь определить функцию с двумя параметрами)
- это свойство "верх" объекта
[object Windows]
это не функция (где я ее использую)
поэтому кажется, что Chrome не различает свойство объекта без параметров и пользовательскую функцию с двумя параметрами
Это принято в IE, Firefox, Opera, Safari
4 ответа
top
является предопределенным свойством объекта окна. Это имеет место в каждом браузере, но другие настолько терпимы, что позволяют вам перезаписать его, а Chrome - нет.
Самым простым и чистым было бы просто переименовать вашу собственность.
Вот список слов, которые вы должны избегать:
Зарезервированные слова
Классы и Объекты
Глобальные свойства и методы
Если вы введете:
Object.getOwnPropertyDescriptor(window.top).writable;
в консоли веб-разработчика Chrome вы увидите, что window.top
не доступно для записи, по крайней мере, в Chrome это не так. И этого не должно быть - просто используйте другое имя или поместите его в собственное пространство имен.
Попробуйте создать новый контекст для вашего приложения /javascript, чтобы он не сталкивался
(function(realTop,realWindow) {
function top() {
// do something
}
// calls our top function
top();
realTop.
})(top, window);
где realTop - это ссылка на исходный верхний объект, а realWindow - это ссылка на исходный оконный объект в указанном контексте.
но, по моему мнению, старайтесь избегать таких имен в будущем
Вы должны переименовать функцию во что-то менее распространенное, например, "topHeader" или "theHeader" или что-то в этом роде. простые имена, такие как "top", наверняка встречаются очень часто.
практическое правило: вы должны сделать свои переменные и функции настолько уникальными, насколько это возможно, чтобы уменьшить вероятность конфликтов имен.
Вы также можете уменьшить вероятность конфликта имен, используя литералы объектов:
var myApp = {
top:function(){
//excite some code...
},
someOtherProp:function(){}
}
myApp.top();