3 回答

TA貢獻(xiàn)1860條經(jīng)驗(yàn) 獲得超8個(gè)贊
在JavaScript中,函數(shù)是第一類對(duì)象。定義函數(shù)時(shí),它是該函數(shù)對(duì)象的構(gòu)造函數(shù)。換一種說法:
var gmap = function() { this.add = function() { alert('add'); return this; } this.del = function() { alert('delete'); return this; } if (this instanceof gmap) { return this.gmap; } else { return new gmap(); }}var test = new gmap();test.add().del();
通過分配
新gmap();
在變量測(cè)試中,您現(xiàn)在構(gòu)建了一個(gè)新對(duì)象,該對(duì)象“繼承”了gmap()構(gòu)造函數(shù)(類)中的所有屬性和方法。如果您運(yùn)行上面的代碼段,則會(huì)看到“添加”和“刪除”的提醒。
在上面的示例中,“this”指的是窗口對(duì)象,除非您將函數(shù)包裝在另一個(gè)函數(shù)或?qū)ο笾小?/p>
起初我很難理解鏈接,至少對(duì)我來說是這樣,但是一旦我理解了它,我就意識(shí)到它可以是多么強(qiáng)大的工具。

TA貢獻(xiàn)1783條經(jīng)驗(yàn) 獲得超4個(gè)贊
可悲的是,直接答案必須是“不”。即使你可以覆蓋現(xiàn)有的方法(你可能在許多UAs中,但我懷疑不能在IE中),你仍然會(huì)遇到令人討厭的重命名:
HTMLElement.prototype.setAttribute = function(attr) { HTMLElement.prototype.setAttribute(attr) //uh-oh; }
您可能最好的方法是使用不同的名稱:
HTMLElement.prototype.setAttr = function(attr) { HTMLElement.prototype.setAttribute(attr); return this;}

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超4個(gè)贊
要“重寫”一個(gè)函數(shù),但仍然能夠使用原始版本,必須先將原始函數(shù)分配給另一個(gè)變量。假設(shè)一個(gè)示例對(duì)象:
function MyObject() { };MyObject.prototype.func1 = function(a, b) { };
要重寫func1
可鏈接性,請(qǐng)執(zhí)行以下操作:
MyObject.prototype.std_func1 = MyObject.prototype.func1;MyObject.prototype.func1 = function(a, b) { this.std_func1(a, b); return this;};
這是一個(gè)有效的例子。您只需要在所有需要可鏈接性的標(biāo)準(zhǔn)對(duì)象上使用此技術(shù)。
當(dāng)你完成所有這些工作時(shí),你可能會(huì)意識(shí)到有更好的方法來完成你想要做的事情,比如使用已經(jīng)內(nèi)置可鏈接性的庫。* cough * jQuery * cough *
添加回答
舉報(bào)