JavaScript:编写函数,将一个对象和一个函数数组作为输入参数,return 一个数组
JavaScript: Write Function that take an object and an array of functions as input args and return an array
我想要一个对象和一个函数数组,return 一个数组。我在这里尝试使用 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']
但是我个人代码的输出是 returning: 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方法?
对于在这些情况下何时需要或不需要调用的概念性解释将不胜感激。
你在每个循环中 returning。所以在第一个循环之后函数结束并且代码不会进一步执行。
它 returns 1
因为 push()
方法 returns 向数组添加元素后的长度。添加 1 个元素时,最初数组为空 returns 1
.
你不一定要使用 map()
只是 push()
元素(不要 return)。和 return 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))
In the solution code above, why do I need the call method in "return fn.call(obj)"?
函数的 this 绑定取决于函数的调用方式。如果函数作为对象的方法被调用,则对象将绑定到该方法。
在上面的代码 this
中,如果它们被正常调用,您的两个函数将 refer
到 window
对象。所以我们希望 this
引用对象,所以我们使用 call
Why eachFunc(obj) returns [undefined, undefined]?
当您不使用 call
时,this
将引用 window
对象。所以在 window
对象上没有 属性 命名为 first
和 last
所以它 returns undefined
我想要一个对象和一个函数数组,return 一个数组。我在这里尝试使用 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']
但是我个人代码的输出是 returning: 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方法?
对于在这些情况下何时需要或不需要调用的概念性解释将不胜感激。
你在每个循环中 returning。所以在第一个循环之后函数结束并且代码不会进一步执行。
它 returns 1
因为 push()
方法 returns 向数组添加元素后的长度。添加 1 个元素时,最初数组为空 returns 1
.
你不一定要使用 map()
只是 push()
元素(不要 return)。和 return 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))
In the solution code above, why do I need the call method in "return fn.call(obj)"?
函数的 this 绑定取决于函数的调用方式。如果函数作为对象的方法被调用,则对象将绑定到该方法。
在上面的代码 this
中,如果它们被正常调用,您的两个函数将 refer
到 window
对象。所以我们希望 this
引用对象,所以我们使用 call
Why eachFunc(obj) returns [undefined, undefined]?
当您不使用 call
时,this
将引用 window
对象。所以在 window
对象上没有 属性 命名为 first
和 last
所以它 returns undefined