使用對象參數(shù)
當(dāng)一個函數(shù)被指定一個值,像在this.get = function (n) { … }中,它應(yīng)該以一個分號來結(jié)束所有的賦值語句。
function yg_cookie() { this.get = function (n) { var v = '', c = ' ' + document.cookie + ';', s = c.indexOf((' ' + n + '=')); if (s >= 0) { s += n.length + 2; v = unescape(c.substring(s, c.indexOf(';', s))); } return v; }; this.set = function (n,v,e) { document.cookie = n + "=" + escape(v) + ";expires=" + (new Date(e * 1000)).toGMTString() + ";path=/" + ";domain=www.yahoo.com"; }; } var _yc = new yg_cookie();
最后,我們看到y(tǒng)g_cookie是一個能產(chǎn)生一個無狀態(tài)對象的構(gòu)造器。我們一點也不需要構(gòu)造器函數(shù)。我們能簡單創(chuàng)建一個空對象,通過指派方法的方式來增加它。
var _yc = new Object(); _yc.get = function (n) { var v = '', c = ' ' + document.cookie + ';', s = c.indexOf((' ' + n + '=')); if (s >= 0) { s += n.length + 2; v = unescape(c.substring(s, c.indexOf(';', s))); } return v; }; _yc.set = function (n,v,e) { document.cookie = n + "=" + escape(v) + ";expires=" + (new Date(e * 1000)).toGMTString() + ";path=/" + ";domain=www.yahoo.com"; };
如果我們不需要支持Netscape3和IE4,我們能通過對象字面量來實現(xiàn)的更加優(yōu)雅。
var _yc = { get: function (n) { var v = '', c = ' ' + document.cookie + ';', s = c.indexOf((' ' + n + '=')); if (s >= 0) { s += n.length + 2; v = unescape(c.substring(s, c.indexOf(';', s))); } return v; }, set: function (n,v,e) { document.cookie = n + "=" + escape(v) + ";expires=" + (new Date(e * 1000)).toGMTString() + ";path=/" + ";domain=www.yahoo.com"; } };
使用通用庫
此時對于處理cookies我們有幾種方法。我們發(fā)現(xiàn)下一個事情是令人驚奇的,它是沒有利用我們定義的方法的cookies處理方式代碼。
var b, l = '', n = '0', y; y = ' ' + document.cookie + ';'; if ((b = y.indexOf(' Y=v')) >= 0) { y = y.substring(b, y.indexOf(';', b)) + '&'; if ((b = y.indexOf('l=')) >= 0) { l = y.substring(b + 2, y.indexOf('&', b)); if ((b = y.indexOf('n=')) >= 0) n = y.substring(b + 2, y.indexOf('&', b)); } }
它甚至復(fù)制了我們早前看到的同樣技術(shù)。很有可能兩塊代碼都改寫自同一個有缺點的原稿。我們可以利用我們最近的工作來改進它:
var l = '', n = '0', y = _yc.get('Y') + '&', b = y.indexOf('l='); if (b >= 0) { l = y.substring(b + 2, y.indexOf('&', b)); b = y.indexOf('n='); if (b >= 0) { n = y.substring(b + 2, y.indexOf('&', b)); } }
代碼重用是軟件工程的圣杯。我們可以想象通過最先進的技術(shù)避免大量的必需的手工工作來得到高效率。這里我們發(fā)現(xiàn)一種失敗,使用一種方法需要在相鄰需要它的地方進行定義。
軟件的體系結(jié)構(gòu)傾向于反映生產(chǎn)他們的組織結(jié)構(gòu)。在這種情況下,我們看到一個組織由于缺乏流程的連通意識而導(dǎo)致的明顯低效的證據(jù)。風(fēng)格的應(yīng)用是吹毛求疵的,因為如果我們理解這幾條是什么才有可能正確的一起使用這幾條。
原文:Douglas Crockford 的 The Elements of JavaScript Style Part One
本文鏈接:http://m.95time.cn/tech/web/2008/5366.asp
出處:隨網(wǎng)之舞
責(zé)任編輯:bluehearts
上一頁 Javascript風(fēng)格要素 [2] 下一頁
◎進入論壇網(wǎng)頁制作、WEB標(biāo)準(zhǔn)化版塊參加討論,我還想發(fā)表評論。
|