我只是在这里搞乱一些代码以更好地理解JavaScript,所以不要问我为什么要这样做或提供替代解决方案。我正在寻找一个理由,说明为什么这不起作用或我做错了什么。
function print(item) {
console.log(this[item]);
return undefined
}
上述功能非常简单。现在,当我将它映射到一个对象的键数组并将该对象提供为要映射的this
值时,它会打印出完美的键值。
Object.keys(hello).map(print, hello);
现在,让我们说我想将上面的内容分配给一个对象的属性。
var hello = {
10: 100,
20: 200,
30: 300,
40: 400,
50: 500
};
我显然不能做到以下几点。
hello.print = Object.keys(hello).map(print, hello);
因为那会分配调用map的结果,并且会产生一个数组,其中每个项都是未定义的,因为我返回undefined而不管函数中的项是什么。
因此,我认为我应该将上述函数调用的变体绑定到hello.print
,以便我可以调用hello.print()
,所以我尝试以下操作。
hello.print = Object.keys(hello).map.bind(hello, print, hello);
现在,我认为应该(在我的知识和意见中)绑定一个版本的map(它调用hello上的print,显然bind也为此获取一个值,所以我已经两次发送了hello)到该对象。 / p>
这不起作用。告诉我为什么。请。
答案 0 :(得分:0)
hello.print = Object.keys(hello).map.bind(hello, print, hello);
现在,我认为应该(在我的知识和意见中)绑定一个版本的map(它调用hello上的print,显然bind也为此获取一个值,所以我已经两次发送了hello)到该对象。 / p>
是的,确实如此。只有它bind map
到hello
,而原始调用确实在Object.keys(hello)
数组上应用了map
- 方法中的this
value呼叫。所以你需要做
hello.print = Array.prototype.map.bind(Object.keys(hello), print, hello);