js面向對象設計用{}好還是function(){}好(構造函數(shù))
更新時間:2011年10月23日 14:18:45 作者:
js面向對象設計用{}好還是function(){}好,大家給予了回復,感覺不錯,特分享給大家。
在網(wǎng)上看了很多JavaScript的項目, 用到對象都是采用{}的形式:
例如jQuery, TinyMCE等都是形如:
var Dialog =
{
int : function() { .... },
insert : function() { .... },
pop : function() { .... }
};
//調用就是:
Dialog.init();
而我自己一直使用function閉包的方式, 感覺使用內部私有成員(函數(shù),變量)更方便:
function classDialog()
{
var box = "sdfsdf"; //init, insert等函數(shù)中調用公共變量就會很方便, 調用內部函數(shù)也很方便(如可以直接調用 search()).
this.init = function() { .... };
this.insert = function() { .... };
this.pop = function() { .... };
function search() { .... }
}
var Dialog = new classDialog();
Dialog.init();
看到TinyMCE在需要使用似有函數(shù)的時候, 是在init : function() { } 這個函數(shù)內部又定義了一個函數(shù), 但是這樣的話, 這個函數(shù)就只能 init調用, 其他方法就沒辦法共用這個私有函數(shù)了.
當然暫時還沒有看到一個私有函數(shù)被多個公共函數(shù)調用的例子.
我想問問各位大神么, 既然function(){} 閉包創(chuàng)建對象使用那么方便, 為什么 {} 方法還用的那么廣泛呢?
是不是 function() {} 創(chuàng)建的對象有什么缺陷?
回復:
對于直接使用{}創(chuàng)建對象..這種情況在創(chuàng)建極少數(shù)對象的情況下且不需要封裝的情況下使用,對于需要批量創(chuàng)建對象的情況使用構造函數(shù)來實例化對象就非常方便 主要還是看具體的情況吧
這兩種是完全不一樣的東西。
{}可以算做一個單例(單例模式)
function(){} 這種返回一個對象。每次都NEW的時候返回都是一個不同的對象!
上面有同學也說了 {} 更效率了。而且不用new。{} 全局固定,可任意擴展。
一般來說{}確實效率高,使用簡單隨意,不過不想暴漏某些方法時候用 function 更好
例如jQuery, TinyMCE等都是形如:
復制代碼 代碼如下:
var Dialog =
{
int : function() { .... },
insert : function() { .... },
pop : function() { .... }
};
//調用就是:
Dialog.init();
而我自己一直使用function閉包的方式, 感覺使用內部私有成員(函數(shù),變量)更方便:
復制代碼 代碼如下:
function classDialog()
{
var box = "sdfsdf"; //init, insert等函數(shù)中調用公共變量就會很方便, 調用內部函數(shù)也很方便(如可以直接調用 search()).
this.init = function() { .... };
this.insert = function() { .... };
this.pop = function() { .... };
function search() { .... }
}
var Dialog = new classDialog();
Dialog.init();
看到TinyMCE在需要使用似有函數(shù)的時候, 是在init : function() { } 這個函數(shù)內部又定義了一個函數(shù), 但是這樣的話, 這個函數(shù)就只能 init調用, 其他方法就沒辦法共用這個私有函數(shù)了.
當然暫時還沒有看到一個私有函數(shù)被多個公共函數(shù)調用的例子.
我想問問各位大神么, 既然function(){} 閉包創(chuàng)建對象使用那么方便, 為什么 {} 方法還用的那么廣泛呢?
是不是 function() {} 創(chuàng)建的對象有什么缺陷?
回復:
對于直接使用{}創(chuàng)建對象..這種情況在創(chuàng)建極少數(shù)對象的情況下且不需要封裝的情況下使用,對于需要批量創(chuàng)建對象的情況使用構造函數(shù)來實例化對象就非常方便 主要還是看具體的情況吧
這兩種是完全不一樣的東西。
{}可以算做一個單例(單例模式)
function(){} 這種返回一個對象。每次都NEW的時候返回都是一個不同的對象!
上面有同學也說了 {} 更效率了。而且不用new。{} 全局固定,可任意擴展。
一般來說{}確實效率高,使用簡單隨意,不過不想暴漏某些方法時候用 function 更好
相關文章
DOMAssitant最新版 DOMAssistant 2.5發(fā)布
google code上的project ,值得大家學習它的類庫2007-12-12JavaScript為對象原型prototype添加屬性的兩種方式
為對象原型prototype添加屬性的的方法, 需要的朋友可以參考下。2010-08-08用JavaScript實現(xiàn)單繼承和多繼承的簡單方法
JavaScript是一種強大的多泛型編程語言,其融合了面向過程、面向對象和函數(shù)式編程于一身,具備強大的表現(xiàn)能力。2009-03-03