2

文字列から新しい関数を作成する際に少し問題があります。例: div といくつかのボタンがあります。ボタンの 1 つは、私の div をアニメーション化するだけで、他には何もありません。しかし、他のボタンは div をアニメーション化し、アニメーションが完了したら、新しい関数を呼び出します。

div がアニメーション化された後に呼び出さなければならない関数がたくさんあるため、次の新しい関数を変数として処理する必要があります。

私が作成した例を次に示します: http://jsfiddle.net/AmVSq/3/。私の問題を理解していただければ幸いです。

JavaScript でを見つけましたnew Function();が、疑問が残り、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_functionますanimate

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

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 に答える