如何在不调用方法的情况下通过另一个方法传递方法,并将变量对象传递给它?

时间:2012-04-05 15:16:50

标签: javascript jquery

对不起我的上一个问题。这是更好格式化的问题。

我有一个方法,我通过一个方法:

method("my_passed_method()")

function method(passed_method){
    eval(passed_method.replace('()', + '(' + obj + ')' );
} 

但是这会回来:

SyntaxError: missing ] after element list

我假设这只是一些简单的JSON语法错误。

4 个答案:

答案 0 :(得分:4)

我想你可能想要这个:

method(my_passed_method)

function method(passed_method){
    passed_method(obj);
} 

请注意,当您呼叫method时,您传递的是函数引用,而不是字符串,而您调用 { {1}}(之后没有my_passed_method),你只是指它。

()内,您可以通过变量method调用该函数,因为该变量包含函数引用。

在JavaScript中,函数是第一类对象。变量可以引用它们,你可以传递它们等等。

这是一个完整的,自包含的例子:

passed_method

Live copy | source

答案 1 :(得分:2)

方法的名称,同时是对该方法对象的引用。括号,可选地在它们之间具有参数,使javascript调用该方法。这意味着您的代码可以重写为:

method(my_passed_method)

function method(passed_method){
    passed_method();
} 

那么,这里发生了什么? 当您传入名称my_passed_method时,javascript引擎将查看该名称映射到的内容,并发现它映射到functio对象。 在方法的函数调用中,该对象被赋值给参数名称`passed_method。比之,在这个名称后加上括号将使javascript尝试执行该对象,这确实是可能的,因为这个对象是一个函数,就像任何其他类型一样,函数就是我们称之为一流的citezens。您可以像处理任何其他值一样将它们分配给变量并传递它们。

答案 2 :(得分:0)

在Javascript函数中被视为对象。您可以将它们作为参数传递给其他函数,如下所示。

function something(x){
alert(x);
}

function pass(func){
  pass2(func);
}

function pass2(func){
  func("hello");
}

pass(something); //alerts hello

演示: http://jsfiddle.net/wBvA2/

答案 3 :(得分:0)

eval是邪恶的;或者他们说。您不需要将函数作为字符串传递,您只需传递函数本身,然后使用Function.callFunction.apply传递参数(或直接调用它):

method(my_passed_method);
function method(passed_method) {
  passed_method(obj);
  // OR: passed_method.call(window,obj);
}

需要eval的情况非常罕见。

请注意,您的代码会将obj评估为javascript,因此输出可能会有所不同。