
正文
下列关于js中call,下列描述中,关于js函数定义方式
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
Javascript中call和apply的区别与详解
apply()是你可以用来操作this的第二个函数方法。apply()的工作方式和call()完全一样,但它只能接受两个参数: this 的值和一个数组或者类似数组的对象,内含需要被传入函数的参数(也就是说你可以把arguments对象作为apply()的第二个参数)。
方法定义 call方法: 语法:call([thisObj[,arg1[, arg2[, [,.argN]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象。 说明: call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。
先说区别call和apply的参数不同,前者是call(a,b,c,...)吧所有的参数都传递。后者apply只传递两个参数apply(a,b),其中b是一个数组。这是两者最大的不同,在于后者传递的是一个数组。在大多数情况下,两个函数可以相互替换的。你可以把apply当作call的糖衣写法。
相关问答
Q1: 如何理解和熟练运用js中的call及apply
首先apply()方法接受两个参数一个是在其中运行函数的作用域,另一个是参数数组,其中第二个可以是Array的实例也可以是arguments对象 对于call()方法而言,第一个参数是this值没有变化,变化的是其余参数直接传递给函数。
apply与call是更改对象的内部指针,即改变对象的this指向的内容;call与apply的第一个参数都是要传入给当前对象的对象,及函数内部的this,后面的参数都是传递给当前对象的参数。
你可以把apply当作call的糖衣写法。就好像js里面循环函数你可以用for也可以用while 一样。call和apply不是一定要怎么用的。但是有时候apply更有用一些,比如我们需要传递一些不知道多少个数量的参数,就没法用call,而因为apply传递的是个数组,数组就比较容易适配各种参数的数量。
Q2: JS中关于call()方法的一个问题,如下图,化红线的地方能不能更改为右边...
1、不能改,因为此处的this是window对象不是e。这里e函数的作用作用其实是定义两个全局变量a,和b。换成e的话就是定义e的属性了。
2、第四种应该是比较容易理解的了。根据开头的分析,f.call(e),e.a = A,这个没有意见吧?所以第二句alert(e.a)就alert出了A。
3、apply与call是更改对象的内部指针,即改变对象的this指向的内容;call与apply的第一个参数都是要传入给当前对象的对象,及函数内部的this,后面的参数都是传递给当前对象的参数。
4、调用一个对象的一个方法,以另一个对象替换当前对象。call([thisObj[,arg1[, arg2[, [,.argN]]])参数 thisObj 可选项。将被用作当前对象的对象。arg1, arg2, , argN 可选项。将被传递方法参数序列。说明 call 方法可以用来代替另一个对象调用一个方法。
5、从定义中可以看出,call和apply都是调用一个对象的一个方法,用另一个对象替换当前对象。而不同之处在于传递的参数,apply最多只能有两个参数——新this对象和一个数组argArray,如果arg不是数组则会报错TypeError;call则可以传递多个参数,第一个参数和apply一样,是用来替换的对象,后边是参数列表。
Q3: 在JS中,call()方法和apply()方法到底该怎么应用?
apply:调用一个对象的一个方法,用另一个对象替换当前对象。例如:B.apply(A, arguments);即A对象应用B对象的方法。call:调用一个对象的一个方法,用另一个对象替换当前对象。
apply传入的是一个参数数组,也就是将多个参数组合成为一个数组传入,而call则作为call的参数传入(从第二个参数开始)。
a:第一个参数都是指定函数内部中this的指向(函数执行时所在的作用域),然后根据指定的作用域,调用该函数。b:都可以在函数调用时传递参数。call,bind方法需要直接传入,而apply方法需要以数组的形式传入。c:call,apply方法是在调用之后立即执行函数,而bind方法没有立即执行,需要将函数再执行一遍。
对象a类似array,但不具备array的slice等方法。使用call绑定,这时候就可以调用slice方法。实现继承 通过call和apply,我们可以实现对象继承。
关于下列关于js中call和下列描述中,关于js函数定义方式的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。





