2012-04-15 37 views
1

本地JavaScript构造函数/函数像Function,Object,Array是否总能在任何范围内使用?它们是由全局对象或类似的甚至更高级别的东西继承的?本机JavaScript的功能是否像“superglobals”一样?

作为一个例子,MooTools的包含在其自身执行的函数以下行:

var Function = this.Function; 

于是我问自己,有没有在那里这些本地构造变得不可用任何情况呢?也许在服务器端或严格的JS?或者它只是一个性能问题缓存本地参考?但是,如果是这样,为什么不这样做是这样:

var Function = Function; 
+0

本地构造函数是全局对象(全局对象的属性),所以是的,它们始终可用。 – 2012-04-15 13:50:49

+1

@ŠimeVidas,这不是永恒的真实。我可以轻易覆盖它们,例如'Function = 6;'之后有一些棘手的方法来引用它们,但是全局引用肯定会以这种方式丢失。 – davin 2012-04-15 13:52:24

回答

1

它们具有相同的名称,所以你不能做到这一点。

(function() { 
    var Function = Function; 

    return Function; 
})(); // undefined 

至于为什么它摆在首位的完成?为了防止用户错误或重新定义,并且为了减少引擎必须查找范围链的数量,相关的博客文章:http://blog.minite.ch/?p=47

当然,Function不是只读的,所以即使有人在全局命名空间中重新定义了Function,这也无济于事。如果谁做到这一点应得的,虽然=)


编辑:如果他们真的没希望防止用户的错误,一个简单的办法是:

var Function = (function() {}).constructor; 

但它是毫无意义的,如上所述。

+0

哦,谢谢,很高兴知道! :) – headacheCoder 2012-04-15 13:57:05

+0

minitech,你有链接了吗? – loveNoHate 2014-02-11 00:02:50

+0

@dollarVar:啊,对不起,打破它。 http://web.archive.org/web/20120617142826/http://blog.minite.ch/?p=47 – Ryan 2014-02-12 03:31:40

相关问题