如何绑定映射函数



我只是在这里弄乱一些代码,以便更好地理解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/edit

hello.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);

最新更新