.call方法在此关键字处抛出错误

时间:2017-11-24 05:22:30

标签: javascript call

在下面的简化代码中,我尝试将字符串妖精推入生物数组中。不幸的是,我在this.push(x)收到错误 Uncaught TypeError: Cannot read property 'push' of undefined at addName

如果this指向拥有它的对象,那么当它与call语句一起使用时,它不应该是生物对象吗?非常感谢您的帮助!



'use strict';
	
var creatures;
	
creatures = ['zombie', 'skeleton', 'orc', 'giant spider'];

function addName(x) {
  this.push(x)
}

addName('goblin').call(creatures);




3 个答案:

答案 0 :(得分:2)

你需要像addName.call(creatures)一样打电话。在函数本身上调用call函数,而不是调用它已经完成的结果。如果你的函数接受参数,你可以在传递上下文后传递这些参数。

'use strict';
	
var creatures;
	
creatures = ['zombie', 'skeleton', 'orc', 'giant spider'];

function addName(x) {
  this.push(x)
}

addName.call(creatures, 'goblin');

console.log(creatures);

答案 1 :(得分:1)

您的代码中存在两个问题

  • call 上调用undefined方法 - 您正在调用call方法调用返回addName方法调用的返回值{{1}虽然只能在undefined上调用call。
  • function方法将call参数作为第一个参数,并从第二个参数中调用函数的参数。

你需要传递 goblin 作为this的第二个参数

call

答案 2 :(得分:1)

我相信在这种情况下更好的课程套件

    'use strict';

class Creatures5{
    constructor(){
        this.creatures = ['zombie', 'skeleton', 'orc', 'giant spider'];
    }   


    addName(x) {
      this.creatures.push(x)
        console.log(this.creatures)
    }
}
var CreatureObj = new Creatures5;
CreatureObj.addName('goblin');

或者你可以

'use strict';
var creatures = ['zombie', 'skeleton', 'orc', 'giant spider'];

function addName(x){
    creatures.push(x)
}


this.addName.call('goblin')