如何將一個事件連接到我定義爲字符串的函數名稱?使用字符串調用JavaScript函數名稱?
我正在使用Prototype.js,雖然這不是Prototype-speficic。
$(inputId).observe('click', formData.fields[x].onclick);
這會導致JavaScript抱怨我的處理函數不是函數。我不希望我們使用eval()
。
如何將一個事件連接到我定義爲字符串的函數名稱?使用字符串調用JavaScript函數名稱?
我正在使用Prototype.js,雖然這不是Prototype-speficic。
$(inputId).observe('click', formData.fields[x].onclick);
這會導致JavaScript抱怨我的處理函數不是函數。我不希望我們使用eval()
。
window.myFunction === window["myFunction"]
看起來像formData.fields[x].onclick
擁有全局函數的名稱?如果是這樣,請嘗試:
$(inputId).observe('click', window[formData.fields[x].onclick]);
你知道onclick屬性包含什麼或它是什麼類型?我認爲這是原型特定的東西,因爲「字段」不存在於DOM表單中。
我已經解決了這個問題,因爲我需要這樣的功能。這是我的沙盒代碼,沒有經過徹底測試,但可以成爲其他人的起點。 請注意,代碼中有一個eval(),因爲我無法弄清楚如何繞過該步驟,也許是一個JavaScript怪癖,無法以其他方式完成。讓我知道是否有辦法擺脫eval()在這裏!
executeFunctionByName = function(functionName)
{
var args = Array.prototype.slice.call(arguments).splice(1);
//debug
console.log('args:', args);
var namespaces = functionName.split(".");
//debug
console.log('namespaces:', namespaces);
var func = namespaces.pop();
//debug
console.log('func:', func);
ns = namespaces.join('.');
//debug
console.log('namespace:', ns);
if(ns == '')
{
ns = 'window';
}
ns = eval(ns);
//debug
console.log('evaled namespace:', ns);
return ns[func].apply(ns, args);
}
core = {
paragraph: {
titlebar: {
user: "ddd",
getUser: function(name)
{
this.user = name;
return this.user;
}
}
}
}
var testf = function()
{
alert('dkdkdkd');
}
var x = executeFunctionByName('core.paragraph.titlebar.getUser', 'Ikon');
executeFunctionByName('testf');
也許吧?
setTimeout ("myFunc()", 1);
只是一個eval
將做的工作
var call = eval("method_name").call(args);
如果您需要調用帶有參數的字符串函數,這樣做:
window[stringFunctionName].apply(window, arrayOfArguments)
可以代替window
使用scope
如果優選
更新:--- 使用ES6導出和導入
a.js
const fn = {
aaa: function() {
//code
},
bbb: function() {
//code
},
//codes ....
nnn: function() {
//code
}
}
export default fn
b.js
import someFn from './a'
//eg
const str1='aaa'
const str2 = 'bbb'
someFn[str1]()
eval('str')
(過時的功能https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Deprecated_and_obsolete_features)
setTimeout('str')
setInterval('str')
window['str']
(但...有時,全局對象不被窗口)
new Function('str')
這些方法就永遠不能被某些原因建議,但他們真的很方便使用。 以下這些方法是安全的,但實際上並不便於使用。
開關...情況下(或者,如果...否則)在一個對象
switch(str){
case 'str1':
fn1()
break
case 'str2':
fn2
//and so on
}
放功能
const fn={
str1:fn1,
str2:fn2
//and so on
}
fn[str1] //call function
可能重複[如何執行JavaScript函數,當我有一個字符串的名稱](http://stackoverflow.com/questions/359788/how-to-execute-a-javascript-function-when-i-have-its-name-as-a-字符串) – olibre 2013-11-08 10:15:52