我想获取一个对象和一个函数数组并返回一个数组。我试图在这里使用 for 循环。
我有以下代码:
const fnArr = [
function firstName() {
return this.first;
},
function lastName() {
return this.last;
},
];
const obj = { first: 'Nimit', last: 'Maru' };
function callAll(obj, fnArr){
let newArray = [];
for (let i=0; i<fnArr.length; i++){
let eachFunc = fnArr[i];
return newArray.push(eachFunc.call(obj))
}
}
callAll(obj, fnArr)
我的预期输出是:
['Nimit', 'Maru']
但是我个人代码的输出正在返回:1
问题 1:我在这里做错了什么?
///////////////////////////////////////////////// ///////////////////////////////////////////////// ////////
此外,我给出的解决方案如下:
const fnArr = [
function firstName() {
return this.first;
},
function lastName() {
return this.last;
},
];
const obj = { first: 'Nimit', last: 'Maru' };
const callAll = (obj, fnArr) => {
return fnArr.map(fn => {
return fn.call(obj);
});
};
它产生正确的答案。
问题2:在上面的解决方案代码中,为什么我需要“return fn.call(obj)”中的call方法?
在这些类型的情况下何时需要或不需要呼叫的概念性解释将不胜感激。
您将在每个循环中返回。所以在第一个循环之后,函数结束,代码不再执行。
它返回1
是因为push()
方法在向数组添加元素后返回数组的长度。当添加 1 个元素时,数组最初为空,它返回1
。
您不必map()
只push()
使用元素(不要返回)。并返回newArray
after 循环。
const fnArr = [
function firstName() {
return this.first;
},
function lastName() {
return this.last;
},
];
const obj = { first: 'Nimit', last: 'Maru' };
function callAll(obj, fnArr){
let newArray = [];
for (let i=0; i<fnArr.length; i++){
let eachFunc = fnArr[i];
newArray.push(eachFunc.call(obj))
}
return newArray
}
console.log(callAll(obj, fnArr))
在上面的解决方案代码中,为什么我需要“return fn.call(obj)”中的call方法?
与函数的 this 绑定取决于函数的调用方式。如果该函数作为对象的方法被调用,则该对象将绑定到该方法。
在上面的代码中,如果它们被正常调用,this
你的两个函数都会反对。所以我们想引用对象所以我们使用refer
window
this
call
为什么eachFunc(obj) 返回[undefined, undefined]?
不使用时call
this
将引用window
对象。因此,有没有属性命名first
,并last
在window
对象使其返回undefined
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句