3 回答
TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超8個(gè)贊
在JavaScript中,函數(shù)是第一類對(duì)象。定義函數(shù)時(shí),它是該函數(shù)對(duì)象的構(gòu)造函數(shù)。換一種說(shuō)法:
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();通過(guò)分配
新gmap();
在變量測(cè)試中,您現(xiàn)在構(gòu)建了一個(gè)新對(duì)象,該對(duì)象“繼承”了gmap()構(gòu)造函數(shù)(類)中的所有屬性和方法。如果您運(yùn)行上面的代碼段,則會(huì)看到“添加”和“刪除”的提醒。
在上面的示例中,“this”指的是窗口對(duì)象,除非您將函數(shù)包裝在另一個(gè)函數(shù)或?qū)ο笾小?/p>
起初我很難理解鏈接,至少對(duì)我來(lái)說(shuō)是這樣,但是一旦我理解了它,我就意識(shí)到它可以是多么強(qiáng)大的工具。
TA貢獻(xiàn)1803條經(jīng)驗(yàn) 獲得超3個(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)1844條經(jīng)驗(yàn) 獲得超8個(gè)贊
要“重寫(xiě)”一個(gè)函數(shù),但仍然能夠使用原始版本,必須先將原始函數(shù)分配給另一個(gè)變量。假設(shè)一個(gè)示例對(duì)象:
function MyObject() { };MyObject.prototype.func1 = function(a, b) { };要重寫(xiě)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í)到有更好的方法來(lái)完成你想要做的事情,比如使用已經(jīng)內(nèi)置可鏈接性的庫(kù)。* cough * jQuery * cough *
添加回答
舉報(bào)
