One of the use-cases for namespaces in
ES4 was early binding (use namespace
intrinsic),both for performance and
for programmer comprehension — no
chance of runtime name binding
disagreeing with any earlier
binding. But early binding in any
dynamic code loading scenario like
the web requires a prioritization or
reservation mechanism to avoid early
versus late binding conflicts.Plus,as some JS implementors have
noted with concern,multiple open
namespaces impose runtime cost unless
an implementation works
significantly harder.For these reasons,namespaces and
early binding (like packages before
them,this past April) must go.
但我不确定我是否理解这一切.究竟什么是优先排序或预留机制,为什么需要这两种机制呢?此外,早期绑定和名称空间必须齐头并进吗?出于某种原因,我无法解决所涉及的问题.任何人都可以尝试更充实的解释吗?
另外,为什么命名空间会占用运行时成本?在我看来,我不禁看到命名空间和使用闭包的函数之间的概念差别不大.例如,雅虎和谷歌都有YAHOO和谷歌对象“行为”名称空间,因为它们包含单个访问点内的所有公共和私有变量,函数和对象.那么,为什么命名空间在实现方面会有如此显着的不同呢?也许我对命名空间的确切含义存在误解.
为了赏金,我想知道两件事:
>命名空间是否需要早期绑定?
>命名空间如何实现
不同于一个对象
私人会员?
解决方法
function ShowMe() { alert(myVar); //alerts "cool" } var myVar = "cool";
关于命名空间,这个过程将会有另一层复杂的问题.
除此之外,还有许多名称空间方法以及expand / applyIf等可以执行许多相同的功能.例如,ExtJS中的namespace()或jQuery中的$.extend.因此,拥有它可能是一件好事,但在语言的结构中并不是绝对的需要.我认为正式化Array的一些扩展,并且在Date中支持ISO-8601日期本身就更为重要.不得不简单地检查每个命名空间层的定义……
window.localization = $.extend(window.localization || {},{ ... }); window.localization.en = $.extend(window.localization.en || {},{ ... });