从字符串创建新函数时遇到一些问题。 例子:我有一个div和一些按钮。其中一个按钮只是让我的div动画,没有别的。但是另一个按钮使div动画化并在动画完成后调用一个新函数。
我必须将新的,跟随函数作为变量处理,因为在div动画后我必须调用很多函数。
以下是我做的一个例子:http://jsfiddle.net/AmVSq/3/。我希望你能理解我的问题。
我在JavaScript中找到了new Function();
,但它让我对此产生了疑问,并且JS控制台没有记录任何内容。
有人可以告诉我,我做错了什么吗? 非常感谢你..
答案 0 :(得分: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();
}
});
}
事实上,出于您的目的,您可以直接将next_function
传递给animate
函数,如下所示:
function close_div( next_function ) {
$('#wrap').animate({ 'height': '-=100px' }, 300, next_function);
}
无需检查next_function
是否为undefined
,因为.animate
会为您执行此操作。
答案 1 :(得分: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);
。
答案 2 :(得分: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);
答案 3 :(得分:0)
chrome控制台正确显示结果:
> f = new Function("alert('hello');");
function anonymous() {
alert('hello');
}
> f(); //executes it.
但是使用string来创建函数,或者将字符串传递给函数来执行它是非常糟糕的做法。
function test(callback) {
callback();
}
test(function() { alert("hello"); });