javascript中的调用函数给出了错误

时间:2015-10-20 06:40:22

标签: javascript

我正在阅读js中的呼叫功能。 现在我有了这段代码



var o = {
  name: 'i am object',
  age: 22
}

function saymyName(arguentToFunc) {
  console.log('my name is ' + this.name + 'and thw argument  passed is ' + arguentToFunc);
}

saymyName.apply(o, 'hello there');




但它会显示一条错误消息Uncaught TypeError: Function.prototype.apply: Arguments list has wrong type

在书中,明确的指南是第二个参数是传递给函数的值。例如,这里是hello there 那么为什么会出错?

嘿,根据这本书 。apply needs this 如果函数被定义为接受任意数量的参数,是什么意思?我的意思是arbritary ??

2 个答案:

答案 0 :(得分:3)

使用call代替apply,因为 apply 需要第二个参数为类似数组的对象。

当需要将值数组作为参数发送到被调用函数时,使用 apply (例如,使用参数对象传递当前正在执行的函数的所有参数)。

Demo

var o = {
  name: 'i am object',
  age: 22
};

function saymyName(arguentToFunc) {

  console.log('my name is ' + this.name + 'and thw argument  passed is ' + arguentToFunc);
}

saymyName.call(o, 'hello there');

另外,请参阅bind了解如何将函数 this 设置为固定值,无论其如何调用。

答案 1 :(得分:3)

apply需要一个参数数组,您应该将其用作

saymyName.apply(o, ['hello there']);

或者您可以使用call

saymyName.call(o, 'hello there');