JS動(dòng)態(tài)調(diào)用方法名示例介紹
更新時(shí)間:2013年12月18日 16:38:10 作者:
在JS中如何動(dòng)態(tài)調(diào)用方法名,想必很多的朋友們都不會(huì)吧,下面為大家舉例介紹下具體的調(diào)用方法
先看看JS的一個(gè)函數(shù)
JavaScript eval() 函數(shù)
定義和用法
eval() 函數(shù)可計(jì)算某個(gè)字符串,并執(zhí)行其中的的 JavaScript 代碼。
語法
eval(string)
參數(shù) 描述
string 必需。要計(jì)算的字符串,其中含有要計(jì)算的 JavaScript 表達(dá)式或要執(zhí)行的語句。
返回值
通過計(jì)算 string 得到的值(如果有的話)。
說明
該方法只接受原始字符串作為參數(shù),如果 string 參數(shù)不是原始字符串,那么該方法將不作任何改變地返回。因此請(qǐng)不要為 eval() 函數(shù)傳遞 String 對(duì)象來作為參數(shù)。
如果試圖覆蓋 eval 屬性或把 eval() 方法賦予另一個(gè)屬性,并通過該屬性調(diào)用它,則 ECMAScript 實(shí)現(xiàn)允許拋出一個(gè) EvalError 異常。
拋出
如果參數(shù)中沒有合法的表達(dá)式和語句,則拋出 SyntaxError 異常。
如果非法調(diào)用 eval(),則拋出 EvalError 異常。
如果傳遞給 eval() 的 Javascript 代碼生成了一個(gè)異常,eval() 將把該異常傳遞給調(diào)用者。
提示和注釋
提示:雖然 eval() 的功能非常強(qiáng)大,但在實(shí)際使用中用到它的情況并不多。
實(shí)例
例子 1
在本例中,我們將在幾個(gè)字符串上運(yùn)用 eval(),并看看返回的結(jié)果:
<script type="text/javascript">
eval("x=10;y=20;document.write(x*y)")
document.write(eval("2+2"))
var x=10
document.write(eval(x+17))
</script>
輸出:
200
4
27
例子 2
看一下在其他情況中,eval() 返回的結(jié)果:
eval("2+3") // 返回 5
var myeval = eval; // 可能會(huì)拋出 EvalError 異常
myeval("2+3"); // 可能會(huì)拋出 EvalError 異常
可以使用下面這段代碼來檢測(cè) eval() 的參數(shù)是否合法:
try {
alert("Result:" + eval(prompt("Enter an expression:","")));
}
catch(exception) {
alert(exception);
}
第一種方法就是使用js里面的eval
下面是自己寫的例子
call("showmsg");
function call(functionName){
eval("this."+functionName+"()");
}
function showmsg(){
alert("success");
}
eval能將你拼接的字符串自動(dòng)識(shí)別為方法,并調(diào)用。
但弊端也是很大的,想象一下,某個(gè)人改你調(diào)用地方的方法名,便能調(diào)用你的任意方法。
第二種方法主要用作自己定義的方法
主要是第二種方法需要特定的方式去寫
function call(functionName) {
showmsgs["showmsg"]();
}
var showmsgs = { showmsg: function () {
alert("success");
}
}
call("showmsg");
JavaScript eval() 函數(shù)
定義和用法
eval() 函數(shù)可計(jì)算某個(gè)字符串,并執(zhí)行其中的的 JavaScript 代碼。
語法
eval(string)
參數(shù) 描述
string 必需。要計(jì)算的字符串,其中含有要計(jì)算的 JavaScript 表達(dá)式或要執(zhí)行的語句。
返回值
通過計(jì)算 string 得到的值(如果有的話)。
說明
該方法只接受原始字符串作為參數(shù),如果 string 參數(shù)不是原始字符串,那么該方法將不作任何改變地返回。因此請(qǐng)不要為 eval() 函數(shù)傳遞 String 對(duì)象來作為參數(shù)。
如果試圖覆蓋 eval 屬性或把 eval() 方法賦予另一個(gè)屬性,并通過該屬性調(diào)用它,則 ECMAScript 實(shí)現(xiàn)允許拋出一個(gè) EvalError 異常。
拋出
如果參數(shù)中沒有合法的表達(dá)式和語句,則拋出 SyntaxError 異常。
如果非法調(diào)用 eval(),則拋出 EvalError 異常。
如果傳遞給 eval() 的 Javascript 代碼生成了一個(gè)異常,eval() 將把該異常傳遞給調(diào)用者。
提示和注釋
提示:雖然 eval() 的功能非常強(qiáng)大,但在實(shí)際使用中用到它的情況并不多。
實(shí)例
例子 1
在本例中,我們將在幾個(gè)字符串上運(yùn)用 eval(),并看看返回的結(jié)果:
復(fù)制代碼 代碼如下:
<script type="text/javascript">
eval("x=10;y=20;document.write(x*y)")
document.write(eval("2+2"))
var x=10
document.write(eval(x+17))
</script>
輸出:
200
4
27
例子 2
看一下在其他情況中,eval() 返回的結(jié)果:
復(fù)制代碼 代碼如下:
eval("2+3") // 返回 5
var myeval = eval; // 可能會(huì)拋出 EvalError 異常
myeval("2+3"); // 可能會(huì)拋出 EvalError 異常
可以使用下面這段代碼來檢測(cè) eval() 的參數(shù)是否合法:
復(fù)制代碼 代碼如下:
try {
alert("Result:" + eval(prompt("Enter an expression:","")));
}
catch(exception) {
alert(exception);
}
第一種方法就是使用js里面的eval
下面是自己寫的例子
復(fù)制代碼 代碼如下:
call("showmsg");
function call(functionName){
eval("this."+functionName+"()");
}
function showmsg(){
alert("success");
}
eval能將你拼接的字符串自動(dòng)識(shí)別為方法,并調(diào)用。
但弊端也是很大的,想象一下,某個(gè)人改你調(diào)用地方的方法名,便能調(diào)用你的任意方法。
第二種方法主要用作自己定義的方法
主要是第二種方法需要特定的方式去寫
復(fù)制代碼 代碼如下:
function call(functionName) {
showmsgs["showmsg"]();
}
var showmsgs = { showmsg: function () {
alert("success");
}
}
call("showmsg");
相關(guān)文章
爬蟲進(jìn)階-JS自動(dòng)渲染之Scrapy_splash組件的使用
Splash是一個(gè)Javascript渲染服務(wù)。它是一個(gè)實(shí)現(xiàn)了HTTP API的輕量級(jí)瀏覽器,Splash是用Python和Lua語言實(shí)現(xiàn)的,基于Twisted和QT等模塊構(gòu)建,今天重點(diǎn)給大家介紹js Scrapy_splash組件使用教程,一起看看吧2021-09-09
JavaScript?進(jìn)階問題列表(各種js代碼段108-155)
從基礎(chǔ)到進(jìn)階,測(cè)試你有多了解?JavaScript,刷新你的知識(shí),或者幫助你的?coding?面試!?:muscle:?:rocket:?我每周都會(huì)在這個(gè)倉庫下更新新的問題2024-11-11
js仿微博實(shí)現(xiàn)統(tǒng)計(jì)字符和本地存儲(chǔ)功能
這篇文章主要介紹了js仿微博實(shí)現(xiàn)統(tǒng)計(jì)字符和本地存儲(chǔ)功能的相關(guān)資料,需要的朋友可以參考下2015-12-12
javascript函數(shù)報(bào)Uncaught?ReferenceError:?XXX?is?not?define
本文主要介紹了javascript函數(shù)報(bào)Uncaught?ReferenceError:?XXX?is?not?defined,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07
css+js實(shí)現(xiàn)部分區(qū)域高亮可編輯遮罩層
下面介紹我在項(xiàng)目中實(shí)現(xiàn)的方式,全屏遮罩,部分區(qū)域可操作,需要的朋友可以參考下2014-03-03
一個(gè)類似vbscript的round函數(shù)的javascript函數(shù)
同vbscript的Round函數(shù)功能相同,四舍五入保留指定小數(shù)位數(shù)2009-04-04
JS按條件 serialize() 對(duì)應(yīng)標(biāo)簽的使用方法
serialize()方法通過序列化表單值,創(chuàng)建標(biāo)準(zhǔn)的URL編碼文本字符串,它的操作對(duì)象是代表表單元素集合的jQuery 對(duì)象。下面通過本文給大家介紹JS按條件 serialize() 對(duì)應(yīng)標(biāo)簽的相關(guān)知識(shí),感興趣的的朋友一起看看吧2017-07-07

