【问题标题】:Best way to define obj constructor in namespace javascript在命名空间javascript中定义obj构造函数的最佳方法
【发布时间】:2013-07-06 12:18:51
【问题描述】:

我想将 obj 构造函数保留在某个命名空间中,并且在调试时没有问题。

现在我有这样的代码:

var namespace = {};
namespace.myConstructor = function(){};
// ----------- debug in console
(new namespace.myConstructor()); // -> namespace.myConstructor {}
(new namespace.myConstructor()).constructor; // -> function (){}

我不喜欢构造函数是匿名的。 所以我可以通过其他方式做到这一点:

(更好,但丑陋)

var namespace = {};
namespace.myConstructor = (function(){
  function myConstructor(){};
  return myConstructor;
})();
// ----------- debug in console
(new namespace.myConstructor()); // -> myConstructor {}
(new namespace.myConstructor()).constructor; // -> function myConstructor(){}

或者(最漂亮最短的方式)

namespace.myConstructor = function myConstructor(){};
// ----------- debug in console
(new namespace.myConstructor()); // -> myConstructor {}
(new namespace.myConstructor()).constructor; // -> function myConstructor(){}

但我读到here,说 NFE(命名函数表达式)存在一些问题。

哪种方式更好?哪种方式是好的做法?

【问题讨论】:

  • @Yve 我删除了额外的问题。现在好了吗?

标签: javascript namespaces


【解决方案1】:

IE8 问题被夸大了,在实践中根本不重要,因为函数将在短期 IIFE 中声明,无论如何不能通过名称引用该函数,因为这样您的代码将无法在真正的浏览器中运行。

记得将构造函数名称大写。

(function(){
    var namespace = {
        MyConstructor: function MyConstructor() {

        },

        ...
    }
})();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-28
    • 1970-01-01
    • 2012-06-13
    • 1970-01-01
    • 1970-01-01
    • 2014-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多