gpt4 book ai didi

Javascript 函数数组失去了 This 范围

转载 作者:行者123 更新时间:2023-12-01 00:20:24 25 4
gpt4 key购买 nike

测试一些代码时我发现了这个问题,当我直接调用 Results 类的函数时,这些函数工作正常,但是当我将它们推送到数组然后调用这些函数时,这些函数不起作用,因为 this关键字丢失,控制台显示未定义的消息。

class Results
{
sum(numbers){
let result=numbers.reduce((a,b)=>a+b);
return result;
}

state(numbers){
console.log(this);
let result= this.sum(numbers)>0 ? "positive" : "negative";
return result;
}
}

function play(){
let results=new Results();

let numbers=[1,2,3,4];

console.log(results.sum(numbers));
console.log(results.state(numbers));

let arrayfunctions=[];

arrayfunctions.push(results.sum);
arrayfunctions.push(results.state);

arrayfunctions.forEach(funcion=>
{
console.log(funcion(numbers))
});
}

最佳答案

定义类方法时略有变化。

sum(numbers) {
let result=numbers.reduce((a,b)=>a+b);
return result;
}

更改为分配给类成员变量的函数

sum = (numbers) => {
let result=numbers.reduce((a,b)=>a+b);
return result;
}

class Results
{
sum = (numbers) => {
let result=numbers.reduce((a,b)=>a+b);
return result;
}

state = (numbers) => {
console.log(this);
let result= this.sum(numbers)>0 ? "positive" : "negative";
return result;
}
}

function play(){
let results=new Results();

let numbers=[1,2,3,4];

console.log(results.sum(numbers));
console.log(results.state(numbers));

let arrayfunctions=[];

arrayfunctions.push(results.sum);
arrayfunctions.push(results.state);

arrayfunctions.forEach(funcion=>
{
console.log(funcion(numbers))
});
}

play();

关于Javascript 函数数组失去了 This 范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59471859/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com