【问题标题】:Define object's prototype in a self executing function在自执行函数中定义对象的原型
【发布时间】:2012-04-29 01:58:43
【问题描述】:

我正在构建一个应用的命名空间,它看起来如下:

var app = {};
app.utils = {
    Expiration: function(){ // contructor
    ... // some code
    },
    init: (function(){
         app.utils.Expiration.prototype = function(){....}
      ())
};

但我得到一个错误:TypeError: Cannot read property 'Expiration' of undefined,实际上这是真的,因为 utils 仍在定义中,我知道我可以在 app 范围之外定义原型,我的问题是:我可以在 app 内定义它还是app.utils 具有自执行功能或通过任何其他方式,谢谢。

【问题讨论】:

  • 你为什么不想在最初的 util 定义之后再定义它?
  • 这听起来可能很迂腐,但我只是想让我的代码看起来很复杂。
  • @user1108631 - 好吧,Javascript 不允许这样做,所以无论你多么希望它看起来那样,你都不能这样做。 app.utils 直到整个声明完成后才被正确定义。
  • 这就是我在帖子末尾提到的内容,但阅读其他人对 js 内部的看法总是很好。

标签: javascript object scope prototype


【解决方案1】:

您不能在静态声明中引用自己的变量名。您的自执行函数会导致在静态声明时对其进行评估和执行。因此app.utils 尚未定义。

还有其他选择。这是一个:

var app = {};
app.utils = {};

app.utils.Expiration = function(){ // contructor
    ... // some code
    };

app.utils.Expiration.prototype = ...

由于这些连续语句中的每一个都添加了另一个级别的属性,因此这些语句必须按此顺序一个接一个地执行,以便前面的元素就位。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-23
    • 1970-01-01
    相关资源
    最近更新 更多