2

我想将 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(){}

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

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

4

1 回答 1

0

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

请记住将构造函数名称大写。

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

        },

        ...
    }
})();
于 2013-07-06T13:51:43.363 回答