javascript中调用和调用函数的详细解决方案
第一篇科技文章的翻译,笑了!原文翻译:
function.apply和function.call Javascript
第一段是轻微的。
每一个Javascript函数有多个连接(连接)的方法,包括toString(),叫(),应用()。听起来你会惊奇地发现,一个函数可以有它自己的方式,但请记住,Javascript中的每个函数是一个对象,看看这篇文章和评论的特点(进修)Javascript。您可能还想知道在Javascript方法的功能之间的差异。我认为函数和方法的描述只有Javascript公约的习惯。功能是基于他们自己的(例如:警报()),其方法是属性(词典)里面的函数对象。我们调用的方法通过对象。每个Javascript对象有一个toString()方法。下面的示例用代码说明。在一个函数对象,我们可以使用ToString()方法。
函数(){
警报(x);
}
警报(foo.tostring());
因为函数都是对象,所以它们有自己的属性和方法。我们可以把它们看作是数据(数据)。
让我们从下面的代码开始:
变量x=10;
函数f(){
警报(此x);
}
(f);
我们定义了一个全局函数f()。f()通过这个关键字访问变量x,但是重要的是要注意,我们不能通过对象实例调用这个函数。这指向全局对象,我们的变量x在这个全局对象中定义,上面的代码可以正常运行,结果将显示一个对话框,对话框中显示10。
我们可以通过这个调用调用()并应用(),如下示例说明如何使用调用():
变量x=10;
var:x:15 };
函数f(){
警报(此x);
}
(f);
f.call(O);
第一次调用f()将显示10个对话框,因为这一点全局对象时,则调用调用的函数f()方法,传入的参数是O,和运行结果表明,15的组织叫X属性值()方法使用它的第一个参数为指针的功能。也就是说,我们会告诉这些对象在函数f的定向运行。
这一跳听起来很可笑,甚至是C++,java,C #程序员。这些都是有趣的部分ECMAscript。
函数也可以通过调用()传递给函数:
变量x=10;
var:x:15 };
函数f(){
警报(此x);
}
(f);
f.call(O);
应用()和调用()类似,只有应用()要求第二个参数必须是一个数组。这个数组作为参数传递给目标函数。
变量x=10;
var:x:15 };
函数f(消息){
警报(消息);
警报(此x);
}
F('invoking F);
f.apply(O,{ 'invoking己经申请' });
应用()方法是有用的,因为我们可以在不考虑目标方法的参数的情况下创建函数。这个函数可以通过第二个数组参数将附加参数传递给方法。
var:x:15 };
函数f(2){
警报(2 +,X);
}
函数F2(2,message2){
警报(2 +(这个X,X)+ message2);
}
函数g(对象,函数,args){
Func.apply(对象,args);
}
g(O,F1,{ x = }的值);
g(O,F2,{ x平方的值=哇!});
这个语法有点问题。为了调用应用()方法,我们强制目标函数使用数组中的参数。幸运的是,有一种方法可以使这个语法变得更简单。
在Javascript中,每个函数都有一个可变长度的参数列表,这意味着即使一个函数只有一个参数,我们也可以传递5个参数给它,在下面的代码中没有错误,结果是H.。
函数f(消息){
警报(消息);
}
F(H,E,L,L,O);
在f()中,如果我们不想接受其他参数,我们可以使用关键字参数。参数表示一个参数对象,它具有代表数组长度的属性。
函数f(消息){
消息和参数{ 0 }的值是相同的。
对于(var i = 1;i < arguments.length;i++){
消息=参数{ };
}
警报(消息);
}
结果表明,hello/
F(H,E,L,L,O);
您应该知道,严格地说,参数不是数组。参数有长度属性,但没有拆分、推和POP方法。在前面的G()函数中,我们可以从参数中复制所需的参数,组成一个数组,然后通过数组来应用()。
var:x:15 };
函数f(2,message2){
警报(2 +(这个X,X)+ message2);
}
函数g(对象,函数){
参数{ 0 } =对象
参数{ 1 } =函数
var args = { };
对于(var i = 2;i < arguments.length;i++){
Args.push(参数{我});
}
Func.apply(对象,args);
}
g(o,f,x平方=的值,。真的!;
当我们调用G()时,我们可以将附加参数作为参数传递,而不是填充。