【发布时间】:2010-03-24 02:10:20
【问题描述】:
我正在查看 qunit 的代码。
我的问题是你为什么要通过属性将 qunit 对象附加到窗口对象。
这是file 的链接。看第 11 行。
如果我查看使用 firebug 运行的单元测试,您会发现它是 window 的属性。
[编辑] 附加:是否有关于在特定命名空间中声明事物的最佳实践的具体参考?
【问题讨论】:
标签: javascript jquery qunit
我正在查看 qunit 的代码。
我的问题是你为什么要通过属性将 qunit 对象附加到窗口对象。
这是file 的链接。看第 11 行。
如果我查看使用 firebug 运行的单元测试,您会发现它是 window 的属性。
[编辑] 附加:是否有关于在特定命名空间中声明事物的最佳实践的具体参考?
【问题讨论】:
标签: javascript jquery qunit
所有全局对象(函数、变量等)都只是 window 的子对象,它是默认上下文。
例如:window.jQuery 或 window.$
这样想可能更容易......你会把它们放在哪里?当你做这样的事情时,最好(或至少最简单)将它们放在默认位置。如果你正在做一些复杂的事情,有很多函数、对象等......最好将它们放在命名空间或对象中。例如,jQuery 的所有代码都在jQuery 下,而不是像window.ajax 那样散落在DOM 的根目录中,而是jQuery.ajax。
这要整洁得多,但在处理一些项目时可能有点过分了,但如果是这种情况,最好确保它们是唯一的...... qunit 这样做,通过在它们的对象前加上 @ 987654326@
【讨论】:
window.$ 是 window.jQuery 的别名,因此您的代码可以更短,例如$(selector) 而不是 jQuery(selector) 我不确定找到实际内存地址的方法,抱歉 :) 对于另一个问题,是的,你从窗口开始,在那里添加一些东西(比如说 jQuery 对象)然后你可以添加到那个。
将全局变量作为window 的属性附加是不好的做法。所有全局变量都应使用var 声明。这是我的理由:
ReferenceErrors。使用var意味着JavaScript的提升生效,并缓解了这个问题。[[DontDelete]] 以这种方式制作的全局变量上没有,这意味着您可以删除全局变量。这很愚蠢。就我而言,window.x = 1 创建了一个名为 x 的全局变量这一事实是 JavaScript 的一个有趣的好奇心,但不应该被使用或回答。然而,使用window 的属性是有充分理由的,因为它和其他对象一样(或多或少)。在这些情况下,您应该使用全名,例如window.onload 而不仅仅是 onload。
【讨论】:
x = y 会引发 ReferenceError: y is not defined。
/*globals */ 评论来缓解,但这并不是使用 window-prop 全局变量的真正理由。