-1

我在所有页面中使用名为 top 的 Javascript 函数来设置标准化标题(在近 2000 个子页面上)。但这在 Chrome 中不起作用。它声称(在控制台中)

  1. top 已经被定义(我尝试用两个参数定义函数)
  2. 对象的那个属性'top'[object Windows]不是一个函数(我在哪里使用它)

所以Chrome似乎没有区分没有参数的对象属性和有两个参数的用户定义函数

这在 IE、Firefox、Opera、Safari 中被接受

4

4 回答 4

3

topwindow-object 的预定义属性。每个浏览器都是这种情况,但是其他浏览器非常宽容,可以让您覆盖它,而 chrome 则不会。

最简单和最干净的事情就是重命名您的财产。

这是您应该避免的单词列表:

保留字
类和对象
全局属性和方法

于 2012-08-15T12:33:56.880 回答
1

如果您键入:

Object.getOwnPropertyDescriptor(window.top).writable;

在 Chrome web 开发者控制台中,你会看到它window.top是不可写的,至少在 chrome 中是不可写的。它也不应该是——只需使用另一个名称或将其放在您自己的命名空间中。

于 2012-08-15T12:37:31.307 回答
0

您应该将该函数重命名为其他不太常见的名称,例如“topHeader”或“theHeader”或类似的名称。像“top”这样简单的名字肯定很常见。

作为经验法则:您应该使您的变量和函数尽可能独特,以减少命名冲突的可能性。

您还可以通过使用对象文字来减少命名冲突的机会:

var myApp = {
     top:function(){
       //excite some code...
   },
      someOtherProp:function(){}
}

myApp.top();
于 2012-08-15T12:35:36.570 回答
0

尝试为您的应用程序/javascript 创建一个新的上下文,这样它就不会发生冲突

(function(realTop,realWindow) {
   function top() {
      // do something
   }

   // calls our top function
   top();

   realTop.
})(top, window);

其中 realTop 是对原始顶部对象的引用,而 realWindow 是对示例上下文中的原始窗口对象的引用

但在我看来,以后尽量避免使用这样的名字

于 2012-08-15T12:33:20.587 回答