答案 0 :(得分:1)
全局定义的函数(和变量)作为全局window
对象的成员可见。
可以使用方括号表示法按名称提取对象的成员:o['k']
与o.k
相同。所以,举个例子:
var function_name= $(this).val();
window[function_name]();
答案 1 :(得分:1)
不完全确定你的意思,但你可以这样做:
var func = window.alert;
var args = ["hello world"]
func.apply(window, args)
答案 2 :(得分:1)
http://mootools.net/shell/yL93N/10/
var proxyFunction = new Class({
message: "hello",
Binds: ['passByReference','sayit'],
passByReference: function(func) {
// console.log(this, this[func]);
if (this[func] && $type(this[func]) === "function")
this[func]();
},
sayit: function() {
alert(this.message);
},
killit: function() {
document.write('we\'re dead');
}
});
$('tryit').addEvent('change',function(e){
new proxyFunction().passByReference(this.get('value'));
});
// or have a permanent proxy instance if you call methods of the class often and need it to change things.
var proxy = new proxyFunction();
$('tryit').addEvent('change',function(e){
proxy.passByReference(this.get('value'));
});
这样做的好处是所有代理函数都在公共对象后面,不会将窗口名称空间污染为全局变量,并且可以共享与事件相关的数据。
答案 3 :(得分:0)
喜欢这个吗?
function blah() {
...do stuff
}
myref = blah
myref()
答案 4 :(得分:0)
最好的方法是:
func.call();
答案 5 :(得分:0)
JavaScript中的函数变量已经是引用。如果你有一个功能:
var explode = function() { alert('boom!'); };
您可以将explode
作为参数传递,并且它只传递该函数的句柄,而不是整个函数体。
为了证明这一点,请尝试:
explode.id = 5;
var detonate = explode;
alert(detonate.id); // => 5
explode.id = 6;
alert(detonate.id); // => 6
答案 6 :(得分:0)
函数是Java Script中的第一类对象。实际上,这意味着您可以将它视为变量,并将其传递给您期望变量的任何位置。
e.g。
var myFn = function() { alert('inside anonymous fn'); }
function callMyFn(paramFn)
{
paramFn();
}
callMyFn(myFn); //inside anonymous fn
function MyFnHolders(argFn)
{
this.argFn = argFn;
this.fieldFn = function() {
alert('inside fn field');
}
}
var myFnHolders = new MyFnHolders(myFn);
myFnHolders.argFn(); //'inside anonymous fn'
myFnHolders.fieldFn(); //'inside fn field'
//etc
所以通过ref传递函数可以简单地通过将其赋值给变量并传递它来完成。
答案 7 :(得分:0)
这里有一个关闭你的论点......
function Runner(func, args) {
return function() { return func.apply(window, args); };
}
var ref = new Runner(window.alert, ["hello world"]);
ref();