關於使用JSPatch重寫setter方法

2021-07-25 09:52:20 字數 1089 閱讀 1291

本部落格遷移來自:

今天出錯的是oc**,針對

setmodel : function

(model)

**_model = model的處理時,我當時從jspatch的issue中看到有人說使用 self.origsetmodel(model)即可,當時也沒有驗證,就一直這麼用。前幾天文章中提到的修復swift**bug中也是這麼用的卻沒有出現什麼問題,但今天我用的時候發現了乙個很嚴重的問題,就是js**在走到 self.origsetmodel(model)這個方法時,它突然去呼叫原生原來的方法了(那就等於白寫了這個方法。

其實問題就出在今天的setter方法中我是要先對資料進行處理然後再賦值給_model,而之前和昨天的**中我是無需對model先處理的,一上來先使用self.origsetmodel(model)方法,它呼叫原生方法後對後面我新增的方法並沒有影響。。。。。先上今天的**吧。

defineclass('wgmonthlyreportmodel',

}if (week.count() > weekcount)

//注釋的是出錯的**

// self.origsetweek(weearr);

self.setvalue_forkey(weearr,"_week");

return;

}//注釋的是出錯的**

self.setvalue_forkey(week,"_week");

}},{});

通過**很清楚的知道,我對week陣列先處理了一同,然後又使用self.origsetweek(week)想實現」_week = week」的使用,殊不知此時已呼叫了原生的setter方法覆蓋了前面寫的一捅。固正確的方法應該是使用「 self.setvalue_forkey」方法實現「_week = week」,比如「 self.setvalue_forkey(week,」_week」)」,修改之後完美解決,愉快的告訴運營的同事:「bug已解決」!(自己接的鍋,含淚也要揹著啊)。

一直以來犯的錯誤,今天才猛然發現(其實「orig」幾個字眼明顯就該想到是呼叫先前的方法啊,我傻了我,還糾結這麼久)。。。。記錄一下,提醒自己下次細心點。

關於方法重寫

方法重寫的定義 子類中如果建立了乙個與父類中相同名稱 相同返回值型別 相同引數列表的方法,只是方法體中的實現不同,以實現不同於父類的功能,這種方式被稱為方法重寫 override 又稱為方法覆蓋。當父類中的方法無法滿足子類需求或子類具有特有功能的時候,需要方法重寫。方法重寫的要求 兩同兩小一大 1....

使用jspatch進行熱修復的實戰總結

工具篇 首先,用xcode來編輯js非常困難,基本上沒有縮排,完全需要手寫 經過研究發現使用 sublime text3 結合 jsformat 外掛程式,可以很好的編輯js指令碼。一般來說,我們可以使用jsconvertor對js進行轉換,然後在sublime text中進行編輯和格式化,通過xc...

關於繼承與重寫

header content type text html charset utf 8 繼承,它是指建立乙個新的派生類,從乙個或多個先前定義的類中繼承資料和函式,而且可以重新定義或加進新資料和函式,從而建立了類的層次或等級。說的簡單點就是,繼承性是子類自動共享父類資料結構和方法的機制,在軟體開發中,...