1.舉個(gè)例子
var scareMe = function () { alert("king"); scareMe = function () { alert("double king"); } }
scareMe(); // king scareMe(); //double king
優(yōu)點(diǎn):函數(shù)有些初始化工作要做,并且僅需執(zhí)行一次蟆盐,可以使用這種模式承边,顯著提升程序性能
缺點(diǎn):當(dāng)他重定義自身時(shí)已經(jīng)添加到原始函數(shù)上的任何屬性都會(huì)丟失;吐過(guò)函數(shù)開始分配給了另一個(gè)變量或者對(duì)象的方法石挂,則重定義行為不會(huì)發(fā)生
2.應(yīng)用
2.1 瀏覽器兼容性檢測(cè)
function addEvent (type, element, fun) { if (element.addEventListener) { element.addEventListener(type, fun, false); } else if(element.attachEvent){ element.attachEvent('on' + type, fun); } else{ element['on' + type] = fun; } }
使用上述代碼會(huì)執(zhí)行重復(fù)檢測(cè)博助,而同一個(gè)應(yīng)用環(huán)境中,只需檢測(cè)一次
function addEvent (type, element, fun) { if (element.addEventListener) { addEvent = function (type, element, fun) { element.addEventListener(type, fun, false); } } else if(element.attachEvent){ addEvent = function (type, element, fun) { element.attachEvent('on' + type, fun); } } else{ addEvent = function (type, element, fun) { element['on' + type] = fun; } } return addEvent(type, element, fun); }
重寫上述函數(shù)痹愚,并在函數(shù)內(nèi)部根據(jù)判斷重定義了自身
2.2創(chuàng)建單例對(duì)象
unction Universe() { // 緩存的實(shí)例 var instance = this; // 其它內(nèi)容 this.start_time = 0; this.bang = "Big"; // 重寫構(gòu)造函數(shù) Universe = function () { return instance; }; }
3.總結(jié)
應(yīng)用頻繁富岳,如果只用一次,是體現(xiàn)不出它的優(yōu)點(diǎn)出來(lái)的拯腮,用的次數(shù)越多窖式,越能體現(xiàn)這種模式的優(yōu)勢(shì)所在;
固定不變动壤,一次判定萝喘,在固定的應(yīng)用環(huán)境中不會(huì)發(fā)生改變;
復(fù)雜的分支判斷琼懊,沒有差異性阁簸,不需要應(yīng)用這種模式;