2013-07-06 80 views
2

我想在某些命名空間中保留obj consructors,並且在調試時沒有問題。在命名空間中定義obj構造函數的最佳方法javascript

現在我有這樣的代碼:

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

或(最beautful和最短路徑)

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

但我讀here,有是NFE(命名函數表達式)的一些問題。

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

+0

@我已經刪除了額外的問題。現在好嗎? – akaRem

回答

0

IE8的問題被誇大了,在實踐中根本沒有任何關係,因爲這些函數將在短期的IIFE中聲明,無論如何都不能通過名稱來引用函數,因爲那樣你的代碼就不能在真正的瀏覽器中工作。

請記住大寫構造函數名稱。

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

     }, 

     ... 
    } 
})(); 
相關問題