2012-11-23 50 views
3

我已經認識到,構造函數可以被實例化使用JavaScript創建它有自己的_proto_財產,也給物業「原型」的構造函數的新對象。的javascript:構造函數VS揭示模塊模式爲一次性使用

function MyController() { 
    var controllerName = 'initialcontroller'; 
    function init() { 
     console.log(controllerName); 
    } 
    this.init = init; 
} 

這裏,初始化可以這樣調用:

var mycontroller = new MyController(); 
mycontroller.init();  

假如我只實例只有一次,再也沒有,這不就是矯枉過正,如果我不打算使用的所有原型屬性由MyController.prototype提供?

問題:相反,我可以不使用顯露模塊模式代碼也是這樣嗎?

var myController = function() { 
    var controllerName = 'initialcontroller'; 
    function init() { 
     console.log(controllerName); 
    } 
    return { 
     init : init 
    } 
}(); 

這裏,初始化可以這樣調用:

myController.init(); 

在這種情況下,如果我嘗試訪問裏面說myController的不存在任何財產,JavaScript引擎將不會嘗試找到該物業是否存在於原型鏈中的任何地方,從而節省了我的時間。

還是有實例,我很俯瞰功能的任何其他優勢?

+0

是的,你可以使用揭示模塊模式像這樣的代碼。這是完全有效的JS。 此外,我猜,更短的代碼。 – Cerbrus

回答

2

如果你只是希望有一個「單身」般的一些方法和其他屬性的對象,你可以只使用一個對象文本簡化事情變得更加:

var myController = { 
    init: function (foo) { 
     // do something with foo or whatever 
    } 
} 

myController.init("bar"); 

或者 - 如果你需要一些「私人「內部狀態,使用常規的啓迪模塊模式:

var myController = (function() { 
    var internal = "i am private"; 
    return { 
     init: function() { 
      // blah blah 
     } 
    }; 
}()); 

myController.init(); 

關於原型查找時間:是的,從理論上講,查找遍歷了,當你試圖訪問一個不存在的屬性原型鏈。從理論上說,這可能是一個點點更快純醇」 Object實例有‘不’的具體構造。實際上,這種性能影響應該可以忽略不計。除非您真的需要,否則不要試圖在此優化。 :)