我在所有页面中使用名为 top 的 Javascript 函数来设置标准化标题(在近 2000 个子页面上)。但这在 Chrome 中不起作用。它声称(在控制台中)
- top 已经被定义(我尝试用两个参数定义函数)
- 对象的那个属性'top'
[object Windows]
不是一个函数(我在哪里使用它)
所以Chrome似乎没有区分没有参数的对象属性和有两个参数的用户定义函数
这在 IE、Firefox、Opera、Safari 中被接受
我在所有页面中使用名为 top 的 Javascript 函数来设置标准化标题(在近 2000 个子页面上)。但这在 Chrome 中不起作用。它声称(在控制台中)
[object Windows]
不是一个函数(我在哪里使用它)所以Chrome似乎没有区分没有参数的对象属性和有两个参数的用户定义函数
这在 IE、Firefox、Opera、Safari 中被接受
top
是window-object 的预定义属性。每个浏览器都是这种情况,但是其他浏览器非常宽容,可以让您覆盖它,而 chrome 则不会。
最简单和最干净的事情就是重命名您的财产。
这是您应该避免的单词列表:
如果您键入:
Object.getOwnPropertyDescriptor(window.top).writable;
在 Chrome web 开发者控制台中,你会看到它window.top
是不可写的,至少在 chrome 中是不可写的。它也不应该是——只需使用另一个名称或将其放在您自己的命名空间中。
您应该将该函数重命名为其他不太常见的名称,例如“topHeader”或“theHeader”或类似的名称。像“top”这样简单的名字肯定很常见。
作为经验法则:您应该使您的变量和函数尽可能独特,以减少命名冲突的可能性。
您还可以通过使用对象文字来减少命名冲突的机会:
var myApp = {
top:function(){
//excite some code...
},
someOtherProp:function(){}
}
myApp.top();
尝试为您的应用程序/javascript 创建一个新的上下文,这样它就不会发生冲突
(function(realTop,realWindow) {
function top() {
// do something
}
// calls our top function
top();
realTop.
})(top, window);
其中 realTop 是对原始顶部对象的引用,而 realWindow 是对示例上下文中的原始窗口对象的引用
但在我看来,以后尽量避免使用这样的名字