【问题标题】:Javascript idiom for code structure用于代码结构的 Javascript 成语
【发布时间】:2010-10-03 11:30:31
【问题描述】:

我的 javascript 多次包含在脚本标签中,如下所示:

<script src="code.js></script>
<script src="code.js></script>
<script src="code.js></script>

现在我在 code.js 中有这段代码,可以让我的代码只运行一次而不会覆盖我的命名空间:

if(typeof _ow == "undefined" ){
_ow = {};
// code in here will only run once

_ow.Auth = (function(){
})();
_ow.Template = (function(){
})();

}

有没有更好的结构可以让我的代码只运行一次?

【问题讨论】:

  • 嗯...为什么您的 code.js 会被多次包含?
  • 诚实,你所拥有的 JavaScript 成语。这也是最易读的方式。不用太聪明。

标签: javascript idioms


【解决方案1】:
var _ow = _ow || { Auth: ... };

如果它已经定义,则不会再次定义。

【讨论】:

  • 是的,我正在做类似的事情,但是我需要为我的所有“功能”这样做,比如 _ow.Auth = _ow.Auth || (功能(){})();这不是很好。
  • 你只需为_ow做一次
  • 您不必为每个函数执行多次,只需创建一次 _ow 变量
【解决方案2】:

您熟悉 Crockford 的Javascript Module Pattern 吗?

关于如何防止覆盖命名空间的细微变化:

var _ow;
if(!_ow) _ow = {};

【讨论】:

  • 该代码 sn-p 将如何工作?当重新执行那段代码时,它每次都会重新定义 _ow
  • var _ow = 9;变量_ow;断言(_ow === 9)//真
【解决方案3】:

虽然您所做的在技术上可行,但效率低下,因为即使您的代码只运行一次,它最终还是会在某些浏览器上被解析多次(这与通过网络下载文件不同) ,并且不能被缓存)。

最好确保脚本只包含一次。对于所有重复的功能,您可以公开一个在需要时调用的函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-21
    • 1970-01-01
    • 2012-11-18
    • 1970-01-01
    • 2011-07-24
    • 2019-05-26
    • 2012-11-10
    • 1970-01-01
    相关资源
    最近更新 更多