我只是在这里弄乱一些代码,以便更好地理解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的结果,并且会导致数组的每个项都是未定义的,因为我返回的是未定义的,而不管函数中的项是什么。
因此,我认为我应该将上述函数调用的一个变体绑定到hello.print
,这样我就可以调用hello.print()
,所以我尝试以下操作:
hello.print = Object.keys(hello).map.bind(hello, print, hello);
现在,我认为(在我的知识和观点中)应该绑定一个版本的map(它调用print on hello,显然bind也接受this的值,所以我已经发送了两次hello)到对象。
这不起作用。告诉我为什么。请。
http://jsbin.com/zebikuwe/1/edithello.print = Object.keys(hello).map.bind(hello, print, hello);
现在,我认为(在我的知识和观点中)应该绑定一个版本的map(它调用print on hello,显然bind也接受this的值,所以我已经发送了两次hello)到对象。
是的,确实如此。只是它确实将map
绑定到hello
,而原始调用确实在Object.keys(hello)
数组上应用map
-它是方法调用中的this
值。所以你需要输入
hello.print = Array.prototype.map.bind(Object.keys(hello), print, hello);