Function
,Object
,Array
等原生JavaScript构造函数/函数是否始终可用于任何范围?它们是由全局对象继承还是在同一级别甚至更高级别继承?
例如,MooTools在其自执行功能中包含以下行:
var Function = this.Function;
所以我问自己,有没有这些本地构造函数不可用的情况?也许在服务器端或严格的JS?或者只是缓存本地引用的性能问题?但如果是这样,为什么不这样做呢:
var Function = Function;
答案 0 :(得分:1)
它们具有相同的名称,因此您不能这样做。
(function() {
var Function = Function;
return Function;
})(); // undefined
至于为什么它首先完成了?据说可以防止用户错误或重新定义,并减少引擎必须查找的范围链的数量。相关博文:http://blog.minite.ch/?p=47
当然,Function
不是只读的,所以即使有人确实在全局命名空间中重新定义Function
也无济于事。任何这样做的人都应该得到它,尽管=)
编辑:如果他们确实想要防止用户错误,那么一个万无一失的方法是:
var Function = (function() {}).constructor;
但如上所述,这是毫无意义的。