日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

js根据name获取value_js 函数的重载

發(fā)布時(shí)間:2025/3/11 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 js根据name获取value_js 函数的重载 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

js 函數(shù)的重載

我們知道,很多編程語言都有函數(shù)的重載。

所謂的重載,看定義:

重載,簡單說,就是函數(shù)或者方法有相同的名稱,但是參數(shù)列表不相同的情形,這樣的同名不同參數(shù)的函數(shù)或者方法之間,互相稱之為重載函數(shù)或者方法。

同名函數(shù),根據(jù)傳入的參數(shù)類型不同,來執(zhí)行對應(yīng)的方法。

所以從這個(gè)定義中,我們能夠得出,js 并不具備函數(shù)的重載功能。

因?yàn)?js 不用對傳入的參數(shù)的類型,進(jìn)行嚴(yán)格的定義。所以,即使我們寫了同名的函數(shù),也只會(huì)導(dǎo)致后面的函數(shù)會(huì)將前面的函數(shù)覆蓋掉。

現(xiàn)在我們假設(shè),即使 js 同名函數(shù)能夠共存,但是我們無法知道不同的同名函數(shù)分別接收什么類型的參數(shù),同樣無法判斷該調(diào)用哪一個(gè)方法。

但是我們在平時(shí)寫代碼的過程中,有一種情況是比較常見的。

比如,我們現(xiàn)在有一個(gè)對象 People,有私有屬性 name 和 age。

因?yàn)?JavaScript 中沒有私有屬性,所以我們只能通過閉包來模擬私有屬性。

所以,我們在構(gòu)造函數(shù)內(nèi)部定義 name 和 age 對象,通過 get,set 接口來統(tǒng)一讀取和修改他們。

代碼見下面所示。

var

用的時(shí)候,我們可以這樣:

// 防止構(gòu)造函數(shù)中沒用 new 我們檢測了一下 this 的指向

可以看到,這里,我們通過用了 get 和 set 函數(shù),來對外提供接口。

那么,我們想一想,我們能不能將這兩個(gè)函數(shù)合并一下,通過同一個(gè)函數(shù),來實(shí)現(xiàn)這兩種功能呢?

答案當(dāng)然是肯定的,我么可以改寫一下我們之前的構(gòu)造函數(shù):

var

再看下我們的使用過程:

var

可以看出來,這樣一改,這個(gè)接口調(diào)用起來就很方便了。

雖然乍一看,這樣該寫了以后,好像不太好理解。但是如果習(xí)慣了這種寫法以后,你會(huì)感受到這種寫法的奇妙之處。簡直太方便了,傳一個(gè)參數(shù)就是拿值,傳兩個(gè)參數(shù),就是改寫對應(yīng)的值。

當(dāng)然這種寫法,是我們在架構(gòu)我們的項(xiàng)目的時(shí)候,有這種意識(shí),這當(dāng)然算是一種比較好的寫法了。

但是如果我們剛開始架構(gòu)的時(shí)候,是這樣寫的:

var

隨著我們項(xiàng)目的進(jìn)行,可能在原型鏈上,有很多方法都用到了 this._name 或者 this._age。

這個(gè)時(shí)候,如果想要遷移我們的變量成閉包內(nèi)部的變量,當(dāng)然是不劃算的,改寫起來太麻煩了。

但是如果我們又想要提供一個(gè)類似于之前的 o 函數(shù),該怎么做呢?

也許又童鞋得第一反應(yīng)是,這還不簡單,三下五除二的進(jìn)行了如下的拓展:

People

這樣寫固然沒有問題,但是還是不太具備擴(kuò)展性。

如果,某一天,我們突發(fā)奇想,想要拓展一下這個(gè) o 方法,當(dāng)不傳參數(shù)的時(shí)候,我們想要列出實(shí)例上所有的屬性。

我們固然可以通過重載這個(gè) o 方法來實(shí)現(xiàn),但是總感覺不夠優(yōu)雅。

現(xiàn)在有一種更為優(yōu)雅的方式。

我們可以創(chuàng)建一個(gè) overload 方法用于重載:

function

我們可以這樣調(diào)用:

overload

我們還可以繼續(xù)擴(kuò)展:

overload

可以看出來,我們的重載函數(shù),非常的強(qiáng)大,擴(kuò)展性也是非常的強(qiáng)。

可以對任意一個(gè)對象上的函數(shù)進(jìn)行重載,當(dāng)然這里是通過識(shí)別參數(shù)的個(gè)數(shù)來進(jìn)行重載的,這也是現(xiàn)階段 js 中所能做到的極限了。

這個(gè)小小的 overload 方法,同樣也是通過閉包來實(shí)現(xiàn)的重載。

原理就是通過比較函數(shù)的參數(shù)與傳入的參數(shù)個(gè)數(shù)是否相等,相等則用調(diào)用當(dāng)前函數(shù)進(jìn)行執(zhí)行。如果不相等,那么調(diào)用 old 函數(shù),進(jìn)行執(zhí)行。而 old 函數(shù)同樣會(huì)遞歸執(zhí)行參數(shù)個(gè)數(shù)判斷這一過程,這樣就實(shí)現(xiàn)了根據(jù)參數(shù)的個(gè)數(shù)對函數(shù)進(jìn)行重載。

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的js根据name获取value_js 函数的重载的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。