【发布时间】:2011-01-24 08:01:30
【问题描述】:
命名空间曾经是 ECMAScript(旧的 ECMAScript 4)的考虑因素,但后来被取消了。正如 Brendan Eich 在this message 中所说:
命名空间的用例之一 ES4 是早期绑定(使用命名空间 内在),无论是性能和 对于程序员的理解——没有 运行时名称绑定的机会 不同意之前的任何 捆绑。但在任何早期绑定 动态代码加载场景,如 网络需要优先级或 提前预约机制 与后期绑定冲突。
另外,正如一些 JS 实现者所拥有的那样 关切地注意到,多个开放
命名空间强加运行时成本,除非 实施工作
明显更难。由于这些原因,命名空间和 早期绑定(如之前的包
他们,今年四月)必须离开。
但我不确定我是否理解所有这些。究竟什么是优先级或保留机制,为什么需要其中任何一个?此外,早期绑定和命名空间必须齐头并进吗?出于某种原因,我无法解决所涉及的问题。任何人都可以尝试更充实的解释吗?
另外,为什么命名空间会带来运行时成本?在我看来,我不禁看到命名空间和使用闭包的函数在概念上几乎没有区别。例如,Yahoo 和 Google 都有 YAHOO 和 google 对象,它们“行为类似于”命名空间,因为它们在单个访问点中包含所有公共和私有变量、函数和对象。那么,为什么命名空间在实现上会有如此显着的不同呢?也许我只是对命名空间到底是什么有一个误解。
为了赏金,我想知道两件事:
- 命名空间是否需要提前绑定?
- 命名空间如何实现 不同于一个对象 私人会员?
【问题讨论】:
标签: javascript namespaces language-design ecma262