js根据name获取value_js 函数的重载
js 函數(shù)的重載
我們知道,很多編程語言都有函數(shù)的重載。
所謂的重載,看定義:
重載,簡單說,就是函數(shù)或者方法有相同的名稱,但是參數(shù)列表不相同的情形,這樣的同名不同參數(shù)的函數(shù)或者方法之間,互相稱之為重載函數(shù)或者方法。同名函數(shù),根據(jù)傳入的參數(shù)類型不同,來執(zhí)行對應(yīng)的方法。
所以從這個定義中,我們能夠得出,js 并不具備函數(shù)的重載功能。
因為 js 不用對傳入的參數(shù)的類型,進行嚴格的定義。所以,即使我們寫了同名的函數(shù),也只會導(dǎo)致后面的函數(shù)會將前面的函數(shù)覆蓋掉。
現(xiàn)在我們假設(shè),即使 js 同名函數(shù)能夠共存,但是我們無法知道不同的同名函數(shù)分別接收什么類型的參數(shù),同樣無法判斷該調(diào)用哪一個方法。
但是我們在平時寫代碼的過程中,有一種情況是比較常見的。
比如,我們現(xiàn)在有一個對象 People,有私有屬性 name 和 age。
因為 JavaScript 中沒有私有屬性,所以我們只能通過閉包來模擬私有屬性。
所以,我們在構(gòu)造函數(shù)內(nèi)部定義 name 和 age 對象,通過 get,set 接口來統(tǒng)一讀取和修改他們。
代碼見下面所示。
var用的時候,我們可以這樣:
// 防止構(gòu)造函數(shù)中沒用 new 我們檢測了一下 this 的指向可以看到,這里,我們通過用了 get 和 set 函數(shù),來對外提供接口。
那么,我們想一想,我們能不能將這兩個函數(shù)合并一下,通過同一個函數(shù),來實現(xiàn)這兩種功能呢?
答案當然是肯定的,我么可以改寫一下我們之前的構(gòu)造函數(shù):
var再看下我們的使用過程:
var可以看出來,這樣一改,這個接口調(diào)用起來就很方便了。
雖然乍一看,這樣該寫了以后,好像不太好理解。但是如果習慣了這種寫法以后,你會感受到這種寫法的奇妙之處。簡直太方便了,傳一個參數(shù)就是拿值,傳兩個參數(shù),就是改寫對應(yīng)的值。
當然這種寫法,是我們在架構(gòu)我們的項目的時候,有這種意識,這當然算是一種比較好的寫法了。
但是如果我們剛開始架構(gòu)的時候,是這樣寫的:
var隨著我們項目的進行,可能在原型鏈上,有很多方法都用到了 this._name 或者 this._age。
這個時候,如果想要遷移我們的變量成閉包內(nèi)部的變量,當然是不劃算的,改寫起來太麻煩了。
但是如果我們又想要提供一個類似于之前的 o 函數(shù),該怎么做呢?
也許又童鞋得第一反應(yīng)是,這還不簡單,三下五除二的進行了如下的拓展:
People這樣寫固然沒有問題,但是還是不太具備擴展性。
如果,某一天,我們突發(fā)奇想,想要拓展一下這個 o 方法,當不傳參數(shù)的時候,我們想要列出實例上所有的屬性。
我們固然可以通過重載這個 o 方法來實現(xiàn),但是總感覺不夠優(yōu)雅。
現(xiàn)在有一種更為優(yōu)雅的方式。
我們可以創(chuàng)建一個 overload 方法用于重載:
function我們可以這樣調(diào)用:
overload我們還可以繼續(xù)擴展:
overload可以看出來,我們的重載函數(shù),非常的強大,擴展性也是非常的強。
可以對任意一個對象上的函數(shù)進行重載,當然這里是通過識別參數(shù)的個數(shù)來進行重載的,這也是現(xiàn)階段 js 中所能做到的極限了。
這個小小的 overload 方法,同樣也是通過閉包來實現(xiàn)的重載。
原理就是通過比較函數(shù)的參數(shù)與傳入的參數(shù)個數(shù)是否相等,相等則用調(diào)用當前函數(shù)進行執(zhí)行。如果不相等,那么調(diào)用 old 函數(shù),進行執(zhí)行。而 old 函數(shù)同樣會遞歸執(zhí)行參數(shù)個數(shù)判斷這一過程,這樣就實現(xiàn)了根據(jù)參數(shù)的個數(shù)對函數(shù)進行重載。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的js根据name获取value_js 函数的重载的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机论文答辩2分钟演讲稿,毕业答辩发言
- 下一篇: java序列化流_java 序列化流与反