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

Javascript .call方法在此关键字处抛出错误,javascript,call,Javascript,Call,在下面的简化代码中,我试图将字符串妖精推入生物数组。不幸的是,我在this.push(x)中出错 未捕获类型错误:无法读取addName处未定义的属性“push” 如果this指向拥有它的对象,那么当它与call语句一起使用时,该对象不应该是生物对象吗?非常感谢你的帮助 “严格使用”; 变种生物; 生物=[‘僵尸’、‘骷髅’、‘兽人’、‘巨型蜘蛛’]; 函数addName(x){ 这个。推(x) } addName('goblin')。调用(生物)你需要像addName.call(生物)那样调

在下面的简化代码中,我试图将字符串妖精推入生物数组。不幸的是,我在
this.push(x)
中出错
未捕获类型错误:无法读取addName处未定义的属性“push”

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

“严格使用”;
变种生物;
生物=[‘僵尸’、‘骷髅’、‘兽人’、‘巨型蜘蛛’];
函数addName(x){
这个。推(x)
}

addName('goblin')。调用(生物)你需要像
addName.call(生物)
那样调用。对函数本身调用
Call
函数,而不是对其结果调用,您已经完成了这项操作。如果函数接受参数,则可以在传递上下文后传递这些参数

“严格使用”;
变种生物;
生物=[‘僵尸’、‘骷髅’、‘兽人’、‘巨型蜘蛛’];
函数addName(x){
这个。推(x)
}
addName.call(生物,地精);

控制台日志(生物)你需要像
addName.call(生物)
那样调用。对函数本身调用
Call
函数,而不是对其结果调用,您已经完成了这项操作。如果函数接受参数,则可以在传递上下文后传递这些参数

“严格使用”;
变种生物;
生物=[‘僵尸’、‘骷髅’、‘兽人’、‘巨型蜘蛛’];
函数addName(x){
这个。推(x)
}
addName.call(生物,地精);

控制台日志(生物)您的代码中有两个问题

  • 调用
    undefined
    上的
    call
    方法-您正在调用
    call
    方法以返回
    addName
    方法调用的返回值,该方法调用返回
    undefined
    ,而调用只能在
    函数
    上调用
  • call
    方法将
    参数作为第一个参数,并从第二个参数开始调用函数的参数
您需要将goblin作为
call的第二个参数传递

 addName.call(creatures, 'goblin');

代码中有两个问题

  • 调用
    undefined
    上的
    call
    方法-您正在调用
    call
    方法以返回
    addName
    方法调用的返回值,该方法调用返回
    undefined
    ,而调用只能在
    函数
    上调用
  • call
    方法将
    参数作为第一个参数,并从第二个参数开始调用函数的参数
您需要将goblin作为
call的第二个参数传递

 addName.call(creatures, 'goblin');

我相信在这种情况下,课堂更适合

    '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')

我相信在这种情况下,课堂更适合

    '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')