2

我在从字符串创建新函数时遇到了一点问题。示例:我有一个 div 和一些按钮。其中一个按钮只是让我的 div 动画,没有别的。但是另一个按钮使 div 动画,动画完成后,调用一个新函数。

我必须将新的跟随函数作为变量处理,因为在 div 动画之后我必须调用很多函数。

这是我做的一个例子:http: //jsfiddle.net/AmVSq/3/。我希望你能理解我的问题。

new Function();在 JavaScript 中找到了,但它让我感到怀疑,并且 JS 控制台没有记录任何内容。

有人可以告诉我我做错了什么吗?非常感谢..

4

4 回答 4

4

在 JavaScript 中,函数是“第一类”对象。这意味着您可以将它们分配给变量并将它们作为参数传递给其他函数。

当您可以传递函数名称本身时,无需从字符串创建函数,如下所示:

<div><a href="javascript:void(0)" onclick="close_div( alert_me );">Close Div then do something</a></div>

和脚本:

function close_div( next_function ) {
    $('#wrap').animate({ 'height': '-=100px' }, 300, function() {
        if ( next_function ) {
            // do the following function
            next_function();
        }
    });
}

--- jsFiddle 演示 ---

实际上,出于您的目的,您可以直接传递next_functionanimate函数,如下所示:

function close_div( next_function ) {
    $('#wrap').animate({ 'height': '-=100px' }, 300, next_function);
}

无需检查 if next_functionis undefined,因为.animate它会为您执行此操作。

于 2012-08-30T17:06:51.657 回答
2

你做错的是使用new Function。正确的方法是只传递函数,它们是 JavaScript 中的其他对象:

http://jsfiddle.net/minitech/AmVSq/6/

<div><a href="javascript:void(0)" onclick="close_div();">Close Div</a></div>
<div><a href="javascript:void(0)" onclick="close_div(alert_me);">Close Div then do something</a></div>
<div><a href="javascript:void(0)" onclick="close_div(confirm_me);">Close Div then do another thing</a></div>
<div id="wrap"></div>​
function close_div( next_function ) {
    $('#wrap').animate({ 'height': '-=100px' }, 300, function() {
        if(next_function) {
            next_function();
        }
    });
}

function alert_me() {
    alert( 'The animation is complete' );
}

function confirm_me() {
    confirm('Are you sure?');
}

或者,更简洁地说,$('#wrap').animate({height: '-100px'}, 300, next_function);.

于 2012-08-30T17:05:03.417 回答
1

chrome 控制台正确显示结果:

> f = new Function("alert('hello');");
function anonymous() {
  alert('hello');
}
> f(); //executes it.

但是使用字符串来创建函数,或者将字符串传递给函数来执行它是非常糟糕的做法。

function test(callback) {
    callback();
}

test(function() { alert("hello"); });
于 2012-08-30T17:04:32.137 回答
1

您不需要将函数转换为字符串,您可以将函数作为参数传递给 Javascript 中的其他函数。

例如:

function get_message1() {
    return "hello world";
}

function get_message2() {
    return "yay for first-class functions";
}

function print_message(message_func) {
    console.log(message_func())
}

print_message(get_message1);
print_message(get_message2);
于 2012-08-30T17:04:56.953 回答