主要是javascript中消除字符串空格,比較兩種方式的不同
//面向對象,消除字符串兩邊空格 String.prototype.trim = function() { return this.replace(/(^\s*)|(\s*$)/g, ""); };//去左右空格的函數; function trim(s){return s.replace(/(^\s*)|(\s*$)/g, ""); }
調用消除空格的兩種方式。
var defualtPhone = defualtDeliveryArray[0].getElementsByTagName("td")[4].textContent.trim();
var defualtPhone = trim(defualtDeliveryArray[0].getElementsByTagName("td")[4].textContent);
就是' abcd '.tirm()和trim(' abcd ')的區別。
由于現在編程的都是智能編輯器,在使用面向對象的時候方法作為對象的一個屬性,在對象的命名空間下,很容易自動補全彈出來。
?
面向對象把某些方法幾種賦予給某一類的對象,無論在調用還是編輯器自動補全的時候優點太多了。
?
在python中,函數式編程和oop編程調用的區別是,假如有兩種類型
?
對object1類型的東西,需要傳給兩個函數處理。;
def fun1a(object1,*args,**kwargs):
? ? ? pass
?
def fun1b(object1,*args,**kwargs):
? ? ? ?pass
?
對object2類型的東西,需要傳給兩個函數處理。;
def fun2a(object2,*args,**kwargs):
? ? ? pass
?
def fun2b(object2,*args,**kwargs):
? ? ? ?pass
?
?
調用的時候,使用?fun1a(object1,*args,**kwargs) ?fun1b(object1,*args,**kwargs) ? ,?fun2a(object2,*args,**kwargs) ?fun2b(object2,*args,**kwargs) ??
傳函數的時候一定不要傳錯了,不能把object2類型的傳給fun1a 和fun1b這兩個函數處理,會出錯。
?
?
面向對象的時候,調用方式是:
a = A(*args,**kwargs)
a.fun1()
a.fun2()
?
b = B(*args,**kwargs)
b.fun3()
b.fun4()
b.fun5()
?
從調用來看,方法越多,面向對象實例化后可以少傳一些參數的次數。面向過程時候,如果fun4需要利用fun3的處理結果,還需要在fun3中各種return,同理還有fun6 fun7什么的,各種return不太好。為了保持多個函數處理同一個變量,還不得不使用一些global全局變量。
當使用面向對象時候,由于編輯器有智能補全功能,肯定不會出現b.fun1()這種亂調用的低級錯誤了,在獲取結果的時候,可以使用object2.xxx的方式獲得,不用到處去return和弄全局變量。
?
python里面的內置類型的方法,如果都改成由函數來處理,每個類型幾十種方法,那我們需要記住幾百種常見函數,記住什么函數能處理什么類型的對象,腦袋簡直要爆炸了。但是調用方法就簡單了,對象后面打個.號,就能自動顯示出對象有哪些屬性,有哪些方法,這些不用記得很清楚就行。python中只有一些很少的函數是各種對象通用的,比如字符串長度 列表長度 集合長度,統一傳給len()函數就能得出結果了,也可以使用str1.__len__()和list1.__len()__這種方式得出長度結果。
?
oop的優點不僅是從代碼組織上,更體現在調用上。那么多第三方庫在調用時候能用的那么爽,那是三方庫中用了大量oop,如果人家全用函數,在調用時候,體驗會大幅下降不爽。
?
此篇僅從js和py中的函數/方法調用形式,來淺顯說明oop的優點。
?