Js 獲取當(dāng)前函數(shù)參數(shù)對(duì)象的實(shí)現(xiàn)代碼
有時(shí)候在封裝控件的時(shí)候在很多 Js 函數(shù)中需要獲取傳入的直接參數(shù)或者對(duì)象參數(shù),那么我們就需要每次都去判斷第一個(gè)對(duì)象,所以為了方便在此封裝一個(gè)函數(shù),來(lái)獲取當(dāng)前函數(shù)中的參數(shù)值:
/*------------------------------------------
* 清除字符串兩端空格,包含換行符、制表符
*------------------------------------------*/
String.prototype.Trim = function () { return this.replace(/(^[\s\n\t]+|[\s\n\t]+$)/g, ""); }
/*----------------------------------------
* 獲取當(dāng)前函數(shù)的參數(shù)對(duì)象
*----------------------------------------
* diffCase 是否區(qū)分大小寫,默認(rèn) false
*----------------------------------------*/
function GetArgs(diffCase) {
//返回參數(shù)對(duì)象
var result = new Object();
//獲取調(diào)用函數(shù)
var caller = arguments.callee.caller;
if (caller == null || caller.arguments.length == 0) return result;
//獲取函數(shù)的參數(shù)集合
var matchs = caller.toString().match(/\s*function[\w\s]*\(([\w\s,]*)\)/);
if (matchs == null) return result;
var argArray = matchs[1].split(",");
//獲取參數(shù)對(duì)象
var params = caller.arguments[0];
var index = typeof (params) == "object" ? 1 : 0;
if (index == 1) {
for (var p in params) {
for (var i = 0; i < argArray.length; i++) {
var arg = argArray[i].Trim();
if (diffCase) {
if (arg == p) {
result[arg] = params[p];
break;
}
} else {
if (arg.toLocaleLowerCase() == p.toLocaleLowerCase()) {
result[arg] = params[p];
break;
}
}
}
}
}
//多個(gè)參數(shù)將第一個(gè)后面的參數(shù)覆蓋對(duì)象傳入的參數(shù)
for (var i = index; i < argArray.length && i < caller.arguments.length; i++)
result[argArray[i].Trim()] = caller.arguments[i];
return result;
}
調(diào)用示例:
//測(cè)試函數(shù)
function Test(name, age) {
//獲取參數(shù)對(duì)象
var args = GetArgs();
alert("姓名:" + args.name + ",年齡:" + args.age);
}
//調(diào)用測(cè)試
Test("張三", 25);
Test({ name: "李四", age: 30 });
Test({ name: "王五" }, 18);
- js實(shí)現(xiàn)輪播圖的兩種方式(構(gòu)造函數(shù)、面向?qū)ο?
- js eval函數(shù)使用,js對(duì)象和字符串互轉(zhuǎn)實(shí)例
- js中的eval()函數(shù)把含有轉(zhuǎn)義字符的字符串轉(zhuǎn)換成Object對(duì)象的方法
- 關(guān)于js函數(shù)解釋(包括內(nèi)嵌,對(duì)象等)
- JavaScript對(duì)象數(shù)組排序函數(shù)及六個(gè)用法
- js面向?qū)ο笾R妱?chuàng)建對(duì)象的幾種方式(工廠模式、構(gòu)造函數(shù)模式、原型模式)
- JS中的函數(shù)與對(duì)象的創(chuàng)建方式
相關(guān)文章
js實(shí)現(xiàn)動(dòng)畫特效的文字鏈接鼠標(biāo)懸停提示的方法
這篇文章主要介紹了js實(shí)現(xiàn)動(dòng)畫特效的文字鏈接鼠標(biāo)懸停提示的方法,實(shí)例分析了javascript操作css的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03
JavaScript中String.prototype用法實(shí)例
這篇文章主要介紹了JavaScript中String.prototype用法,實(shí)例分析了prototype的功能及使用技巧,需要的朋友可以參考下2015-05-05
js實(shí)現(xiàn)淘寶首頁(yè)的banner欄效果
這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)淘寶首頁(yè)的banner欄效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-11-11
js使用swiper實(shí)現(xiàn)層疊輪播效果實(shí)例代碼
這篇文章主要給大家介紹了關(guān)于js使用swiper實(shí)現(xiàn)層疊輪播效果的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-12-12
knockoutjs模板實(shí)現(xiàn)樹形結(jié)構(gòu)列表
這篇文章主要介紹了knockoutjs模板實(shí)現(xiàn)樹形結(jié)構(gòu)列表的實(shí)現(xiàn)代碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧2017-07-07
js之如何刪除多層數(shù)組嵌套的最后一層中的部分?jǐn)?shù)據(jù)
這篇文章主要介紹了js之如何刪除多層數(shù)組嵌套的最后一層中的部分?jǐn)?shù)據(jù)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06
談?wù)凱HP中相對(duì)路徑的問題與絕對(duì)路徑的使用
經(jīng)??吹接腥瞬仍诹薖HP路徑的坑上面了,感覺有必要來(lái)說(shuō)說(shuō)PHP中相對(duì)路徑的一些坑,以及PHP中絕對(duì)路徑的使用,下面一起來(lái)看看。2016-08-08
詳解template標(biāo)簽用法(含vue中的用法總結(jié))
這篇文章主要介紹了template標(biāo)簽用法(含vue中的用法總結(jié)),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2021-01-01

