js面向?qū)ο笤O(shè)計(jì)用{}好還是function(){}好(構(gòu)造函數(shù))
更新時(shí)間:2011年10月23日 14:18:45 作者:
js面向?qū)ο笤O(shè)計(jì)用{}好還是function(){}好,大家給予了回復(fù),感覺不錯(cuò),特分享給大家。
在網(wǎng)上看了很多JavaScript的項(xiàng)目, 用到對象都是采用{}的形式:
例如jQuery, TinyMCE等都是形如:
var Dialog =
{
int : function() { .... },
insert : function() { .... },
pop : function() { .... }
};
//調(diào)用就是:
Dialog.init();
而我自己一直使用function閉包的方式, 感覺使用內(nèi)部私有成員(函數(shù),變量)更方便:
function classDialog()
{
var box = "sdfsdf"; //init, insert等函數(shù)中調(diào)用公共變量就會很方便, 調(diào)用內(nèi)部函數(shù)也很方便(如可以直接調(diào)用 search()).
this.init = function() { .... };
this.insert = function() { .... };
this.pop = function() { .... };
function search() { .... }
}
var Dialog = new classDialog();
Dialog.init();
看到TinyMCE在需要使用似有函數(shù)的時(shí)候, 是在init : function() { } 這個(gè)函數(shù)內(nèi)部又定義了一個(gè)函數(shù), 但是這樣的話, 這個(gè)函數(shù)就只能 init調(diào)用, 其他方法就沒辦法共用這個(gè)私有函數(shù)了.
當(dāng)然暫時(shí)還沒有看到一個(gè)私有函數(shù)被多個(gè)公共函數(shù)調(diào)用的例子.
我想問問各位大神么, 既然function(){} 閉包創(chuàng)建對象使用那么方便, 為什么 {} 方法還用的那么廣泛呢?
是不是 function() {} 創(chuàng)建的對象有什么缺陷?
回復(fù):
對于直接使用{}創(chuàng)建對象..這種情況在創(chuàng)建極少數(shù)對象的情況下且不需要封裝的情況下使用,對于需要批量創(chuàng)建對象的情況使用構(gòu)造函數(shù)來實(shí)例化對象就非常方便 主要還是看具體的情況吧
這兩種是完全不一樣的東西。
{}可以算做一個(gè)單例(單例模式)
function(){} 這種返回一個(gè)對象。每次都NEW的時(shí)候返回都是一個(gè)不同的對象!
上面有同學(xué)也說了 {} 更效率了。而且不用new。{} 全局固定,可任意擴(kuò)展。
一般來說{}確實(shí)效率高,使用簡單隨意,不過不想暴漏某些方法時(shí)候用 function 更好
例如jQuery, TinyMCE等都是形如:
復(fù)制代碼 代碼如下:
var Dialog =
{
int : function() { .... },
insert : function() { .... },
pop : function() { .... }
};
//調(diào)用就是:
Dialog.init();
而我自己一直使用function閉包的方式, 感覺使用內(nèi)部私有成員(函數(shù),變量)更方便:
復(fù)制代碼 代碼如下:
function classDialog()
{
var box = "sdfsdf"; //init, insert等函數(shù)中調(diào)用公共變量就會很方便, 調(diào)用內(nèi)部函數(shù)也很方便(如可以直接調(diào)用 search()).
this.init = function() { .... };
this.insert = function() { .... };
this.pop = function() { .... };
function search() { .... }
}
var Dialog = new classDialog();
Dialog.init();
看到TinyMCE在需要使用似有函數(shù)的時(shí)候, 是在init : function() { } 這個(gè)函數(shù)內(nèi)部又定義了一個(gè)函數(shù), 但是這樣的話, 這個(gè)函數(shù)就只能 init調(diào)用, 其他方法就沒辦法共用這個(gè)私有函數(shù)了.
當(dāng)然暫時(shí)還沒有看到一個(gè)私有函數(shù)被多個(gè)公共函數(shù)調(diào)用的例子.
我想問問各位大神么, 既然function(){} 閉包創(chuàng)建對象使用那么方便, 為什么 {} 方法還用的那么廣泛呢?
是不是 function() {} 創(chuàng)建的對象有什么缺陷?
回復(fù):
對于直接使用{}創(chuàng)建對象..這種情況在創(chuàng)建極少數(shù)對象的情況下且不需要封裝的情況下使用,對于需要批量創(chuàng)建對象的情況使用構(gòu)造函數(shù)來實(shí)例化對象就非常方便 主要還是看具體的情況吧
這兩種是完全不一樣的東西。
{}可以算做一個(gè)單例(單例模式)
function(){} 這種返回一個(gè)對象。每次都NEW的時(shí)候返回都是一個(gè)不同的對象!
上面有同學(xué)也說了 {} 更效率了。而且不用new。{} 全局固定,可任意擴(kuò)展。
一般來說{}確實(shí)效率高,使用簡單隨意,不過不想暴漏某些方法時(shí)候用 function 更好
相關(guān)文章
DOMAssitant最新版 DOMAssistant 2.5發(fā)布
google code上的project ,值得大家學(xué)習(xí)它的類庫2007-12-12javascript 面向?qū)ο缶幊?function也是類
function在javascript中用來創(chuàng)建函數(shù)或方法,但要想實(shí)現(xiàn)面向?qū)ο蠓绞降木幊?,類是不可或缺的角色之一,而且是主角?/div> 2009-09-09JavaScript為對象原型prototype添加屬性的兩種方式
為對象原型prototype添加屬性的的方法, 需要的朋友可以參考下。2010-08-08用JavaScript實(shí)現(xiàn)單繼承和多繼承的簡單方法
JavaScript是一種強(qiáng)大的多泛型編程語言,其融合了面向過程、面向?qū)ο蠛秃瘮?shù)式編程于一身,具備強(qiáng)大的表現(xiàn)能力。2009-03-03js對象的構(gòu)造和繼承實(shí)現(xiàn)代碼
js對象的構(gòu)造和繼承實(shí)現(xiàn)代碼,學(xué)習(xí)javascript面向?qū)ο蟮呐笥芽梢詤⒖枷?。寫出跟漂亮與復(fù)用的代碼。2010-12-12JavaScript 設(shè)計(jì)模式之組合模式解析
“組合模式”顧名思意就是將多種實(shí)現(xiàn)組合在一起而達(dá)到牽一處而動全身的效果。2010-04-04javascript 面向?qū)ο蟮腏avaScript類
這一節(jié)來說下緊接著的一個(gè)概念——類。雖然JavaScript中沒有class關(guān)鍵字,但作為開發(fā)人員我們一定要有這個(gè)思想。在C#中類可以分為實(shí)例類和靜態(tài)類,JavaScript亦然。2010-05-05最新評論