首页 > 试题广场 >

下面有关JavaScript中call和apply方法的描述

[单选题]
下面有关JavaScript中call和apply方法的描述,错误的是?
  • call与apply都属于Function.prototype的一个方法,所以每个function实例都有call、apply属性
  • 两者传递的参数不同,call函数第一个参数都是要传入给当前对象的对象,apply不是
  • apply传入的是一个参数数组,也就是将多个参数组合成为一个数组传入
  • call传入的则是直接的参数列表。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。
推荐
B;
call()方法和apply()方法的作用相同,他们的区别在于接收参数的方式不同。对于call(),第一个参数是this值没有变化,变化的是其余参数都直接传递给函数。(在使用call()方法时,传递给函数的参数必须逐个列举出来。使用apply()时,传递给函数的是参数数组)如下代码做出解释:

function add(c, d){
return this.a + this.b + c + d;
}
var o = {a:1, b:3};
add.call(o, 5, 7); // 1 + 3 + 5 + 7 = 16
add.apply(o, [10, 20]); // 1 + 3 + 10 + 20 = 34


编辑于 2016-07-03 09:21:39 回复(15)

1、call,apply都属于Function.prototype的一个方法,它是JavaScript引擎内在实现的,因为属于Function.prototype,所以每个Function对象实例(就是每个方法)都有call,apply属性。既然作为方法的属性,那它们的使用就当然是针对方法的了,这两个方法是容易混淆的,因为它们的作用一样,只是使用方式不同。

2、语法:foo.call(this, arg1,arg2,arg3) == foo.apply(this, arguments) == this.foo(arg1, arg2, arg3);

3、相同点:两个方法产生的作用是完全一样的。

4、不同点:方法传递的参数不同。
   解析来源于网络
发表于 2018-08-31 20:46:49 回复(0)
call()方法和apply()方法的作用相同,他们的区别在于接收参数的方式不同。
发表于 2015-08-26 15:58:12 回复(0)
d是这两个函数的作用
发表于 2015-08-09 23:33:34 回复(0)
B
发表于 2015-01-04 13:14:51 回复(0)
B

相同点:两个方法产生的 作用是完全一样的

不同点:方法传递的参数不同

call, apply方法它们除了第一个参数,即执行时上下文对象相同外,call方法的其它参数将依次传递给借用的方法作参数,而apply就两个参数,第二个参数为一个数组传递
发表于 2015-06-03 10:20:32 回复(0)
1.作用
在特定的作用域总调用函数,等于设置函数体内this对象的值,以扩充函数赖以运行的作用域。
window.color="red";
var o={color:"blue"};
function getColor(){
    console.log(this.color);
}
getColor.call(this);
getColor.call(window);
getColor.call(o);
2.区别
接收参数的方式不同:
对于call(),第一个参数是运行函数的作用域,其余参数都直接传递给函数即传递给函数的参数必须逐个列举出来。
对于apply(),第一个参数是 运行函数的作用域 ,另一个参数是参数数组,可以是Array实例或arguments对象。
function sum(num1,num2){
return num1+num2;
}
function callSum(num1,num2){
return sum.call(this,num1,num2);
}
function callSum(num1,num2){
return sum.apply(this,arguments);
}
function callSum(num1,num2){
return sum.apply(this,[num1,num2]);
}
编辑于 2016-05-03 21:19:29 回复(1)
1、每个函数都包含两个非继承而来的方法:apply()和call()。 
2、他们的用途相同,都是在特定的作用域中调用函数。 
3、接收参数方面不同,apply()接收两个参数,一个是函数运行的作用域(this),另一个是参数数组。
                                    call()方法第一个参数与apply()方法相同,但传递给函数的参数必须列举出来。 
例1
window.firstName = "diz"; 
window.lastName = "song"; 
var myObject = { firstName: "my", lastName: "Object" }; 
function HelloName() { 
console.log("Hello " + this.firstName + " " + this.lastName, " glad to meet you!"); 
HelloName.call(window); //huo .call(this); 
HelloName.call(myObject); 
运行结果为: 
Hello diz song glad to meet you! 
Hello my Object glad to meet you! 
以上例子表示了call方法在可以特定的作用于中调用函数
例2
function sum(num1, num2) { 
return num1 + num2; 
console.log(sum.call(window, 10, 10)); //20 
console.log(sum.apply(window,[10,20])); //30 
以上例子代表了两方法传参得区别
发表于 2017-02-27 15:19:08 回复(0)
这道题也不严谨啊。
C答案,apply传入的参数,第一个是目标对象,后面的参数才是一个数组呢。
发表于 2018-05-29 16:13:26 回复(0)
B; call()方法和apply()方法的作用相同,他们的区别在于接收参数的方式不同。对于call(),第一个参数是this值没有变化,变化的是其余参数都直接传递给函数。(在使用call()方法时,传递给函数的参数必须逐个列举出来。使用apply()时,传递给函数的是参数数组)如下代码做出解释: function add(c, d){ return this.a + this.b + c + d; } var o = {a:1, b:3}; add.call(o, 5, 7); // 1 + 3 + 5 + 7 = 16 add.apply(o, [10, 20]); // 1 + 3 + 10 + 20 = 34
发表于 2016-03-24 10:26:42 回复(0)
两者的第一个参数相同,其后的参数不同,apply是一个参数数组(由参数构成的数组,只有一个数组对象),call是一个参数列表(由多个参数对象构成)
发表于 2022-01-04 11:28:21 回复(0)
call  apply bind 总结
相同点: 
都可以改变函数内部的this指向.
区别点: 
1.call 和 apply  会调用函数, 并且改变函数内部this指向.
2.call 和 apply传递的参数不一样,call 传递参数 aru1,aru2..形式     apply 必须数组形式[arg] 
fun.call(thisArg,arg1, arg2, ...)
fun.apply(thisArg,[argsArray])
3.bind  不会调用函数, 可以改变函数内部this指向.  fun.bind(thisArg,arg1, arg2, ...)
主要应用场景: 
1.call 经常做继承.
        function Father(uname, age, sex) {           
         this.uname = uname;             
         this.age = age;          
         this.sex = sex;         
}        
      function Son(uname, age, sex) {         
      Father.call(this, uname, age, sex);       
  } 
  var son = new Son('刘德华', 18, '男');  //这时候son就具有了uname age sex属性

2.apply经常跟数组有关系.  比如借助于数学对象实现数组最大值最小值 
var min=Math.min.apply(..., arr);
3.bind  不调用函数,但是还想改变this指向. 比如改变定时器内部的this指向. 
发表于 2021-07-18 09:29:03 回复(0)
bind、call、apply都是用于改变方法中的this指向。
bind 和 call 传递的都是剩余参数,apply传递的是参数数组。
三者的第一个参数都是要指向的对象,如果为null或者undefined时,则执行windows
call 和 apply都会在绑定后立即执行,但是bind会返回一个永久改变this指针的函数,方便之后调用。
call 和 apply都只能一次性传入所有参数,bind可以分开传递参数,
发表于 2021-03-27 16:29:48 回复(1)
A答案不能说是完全正确的
js的继承其实采用并不是传统的面向对象去类那里复制一份,他是通过prototype的委托方式来实行的
也就是说call和apply准确来说并不在每个function实例上,而是在Function.prototype这个对象上,在function实例调用call或者apply方法时,JavaScript引擎首先是去在这个function实例(函数也是对象,可以拥有自己的熟悉)上找这个对象上的属性,发现没有call或者apply方法时,就会去这个对象的[[Prototype]]链上去找,如果找到了,则调用prototype上的方法
发表于 2020-04-08 21:39:13 回复(0)

相同点:两个方法产生的 作用是完全一样的

不同点:方法传递的参数不同

call()方法和apply()方法的作用相同,他们的区别在于接收参数的方式不同。对于call(),第一个参数是this值没有变化,变化的是其余参数都直接传递给函数。(在使用call()方法时,传递给函数的参数必须逐个列举出来。使用apply()时,传递给函数的是参数数组)如下代码做出解释:

function add(c, d){ 
return this.a + this.b + c + d; 
} 
var o = {a:1, b:3}; 
add.call(o, 5, 7); // 1 + 3 + 5 + 7 = 16 
add.apply(o, [10, 20]); // 1 + 3 + 10 + 20 = 34 
编辑于 2017-09-21 08:41:44 回复(0)

实际上,apply的第一个参数也是要传入给当前对象的对象。所以,apply的第一个参数和call是一样的。两者的主要区别在于他们接收的第二个参数:call的第二个参数是直接传递的参数列表,而apply传入的则是一个参数数组,也就是将多个参数组合成为一个数组传入

发表于 2023-09-07 14:28:40 回复(0)
call()方法和apply()方法的作用相同,他们的区别在于接收参数的方式不同。对于call(),第一个参数是this值没有变化,变化的是其余参数都直接传递给函数。(在使用call()方法时,传递给函数的参数必须逐个列举出来。使用apply()时,传递给函数的是参数数组)如下代码做出解释:

function add(c, d){
return this.a + this.b + c + d;
}
var o = {a:1, b:3};
add.call(o, 5, 7); // 1 + 3 + 5 + 7 = 16
add.apply(o, [10, 20]); // 1 + 3 + 10 + 20 = 34
发表于 2022-07-19 22:54:50 回复(0)
关于第一个选项
箭头函数是有call和apply的,只不过this绑定无效,但是能传递参数
所以第一个选项是对的
发表于 2021-11-10 18:06:44 回复(0)
call() 和 apply() 计算结果相同,只是传的参数不同;
① call  (this, param_1, param_2,...):  this值不变;param_x 是可变参数,传递的参数必须逐个列出;
②apply(this, array):array是参数数组;
发表于 2021-10-19 15:19:53 回复(0)
call与apply核心区别是call后参数是多个分开的,apply后参数是一个列表
发表于 2021-08-20 21:29:35 回复(0)
foo.call(this, arg1,arg2,arg3) == foo.apply(this, arguments) == this.foo(arg1, arg2, arg3);
发表于 2021-03-12 11:19:12 回复(0)