Javascript小巧靈活,能夠完成各種高難度的設計模式。下面要介紹的,只是其中之一。蘿卜白菜,各有所愛(ài)吧。沒(méi)什么標準可以鑒定好壞。
比如我們要定義人類(lèi):
function man(){}var a = new man()人要有名:
function man(name) {this.Name = name}var a = new man('a')var b = new man('b')可人也要有錢(qián)有車(chē)有房有人關(guān)注,等等,人要的東西太多,最好不要在造人的時(shí)候想著(zhù)這些。只想著(zhù)she就好了。
function man(she){this.she = she}var a = new man({Name:'a', Sex:'m'})a.she.Name = 'A'我們不想把心里的she袒露出來(lái)。這樣,我們就需要一個(gè)閉包:
function man(she){ var Name, Sex return function(){Name = she.Name; Sex = she.Sex}}a = man({Name:'a', Sex:'m'})但這樣就無(wú)法讀寫(xiě)閉包包住的變量了。還好Javascript的函數也是對象,也就是可以直接讀寫(xiě)屬性:
function man(){return function(){}}var a = man()a.Name = 'a'a.Sex = 'm'改名容易:a.Name = 'A', 可我們不想隨便改性。這樣就需要getter/setter函數控制:
function man(){ var Name, Sex function my(){} my.Name = function(n){ if (!arguments.length) return Name Name = n return my } my.Sex = function(s) { if (!arguments.length) return Sex Sex = Sex ? Sex : s return my } return my}a = man()a.Sex('m')a.Sex('f')x = a.Sex() // 'm'而且我們讓每個(gè)函數返回對象自身,就可以很容易的把函數串接在一起:
a = man().Name('a').Sex('m')帶取置函數的閉包,就是我最為欣賞的對象。
--
fango
聯(lián)系客服