在下面的简化代码中,我尝试将字符串妖精推入生物数组中。不幸的是,我在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);

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