4

我正在查看 qunit 的代码。

我的问题是为什么要通过属性将 qunit 对象附加到窗口对象。

这是文件的链接。看第 11 行。

如果我查看使用 firebug 运行的单元测试,您会发现它是 window.properties 的一个属性。

[编辑] 附加:在特定命名空间中声明事物的最佳实践是否有特定参考?

4

2 回答 2

7

所有全局对象(函数、变量等)都只是 window 的子对象,它是默认上下文。

例如:window.jQuerywindow.$

这样想可能更容易……你还会把它们放在哪里?当你做这样的事情时,最好(或至少最简单)将它们放在默认位置。如果你正在做一些复杂的事情,有很多函数、对象等......最好将它们放在命名空间或对象中。例如,所有 jQuery 的代码都jQuery在.window.ajaxjQuery.ajax

这更整洁,但是当您处理一些项目时可能会过度杀伤力,但是如果是这种情况,最好确保它们是唯一的...... qunit 这样做,通过在它们的对象前加上前缀qunit-

于 2010-03-24T02:13:17.023 回答
2

将全局变量作为属性附加window是不好的做法。所有全局变量都应该使用var. 以下是我的理由:

  1. 它使源代码的静态分析变得更加困难。通过查看脚本无法判断哪些全局变量将被声明以及何时声明。如果使用未声明的全局变量,它们创建ReferenceErrors。Usingvar意味着 JavaScript 的提升生效,并缓解了这个问题。
  2. 以这种方式制作的全局变量根本不同,您的代码没有简单的方法来检测这一点。最大的区别是没有[[DontDelete]]以这种方式制作的全局变量,这意味着您可以删除全局变量。这很愚蠢。
  3. 它会诱使您从全局范围之外声明您的全局变量。这是魔术,也是坏魔术。不要这样做。

就我而言,window.x = 1创建一个名为的全局变量的事实x是 JavaScript 的一个有趣的好奇心,但不应该使用或回答。然而,使用 的属性是有充分理由的window,因为它和任何其他对象一样(或多或少)。在这些情况下,您应该使用全名,例如,window.onload而不仅仅是onload.

于 2010-03-24T06:15:41.443 回答