如何绑定映射函数?

时间:2014-08-09 14:52:15

标签: javascript

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

这不起作用。告诉我为什么。请。

http://jsbin.com/zebikuwe/1/edit

1 个答案:

答案 0 :(得分:0)

hello.print = Object.keys(hello).map.bind(hello, print, hello);
     

现在,我认为应该(在我的知识和意见中)绑定一个版本的map(它调用hello上的print,显然bind也为此获取一个值,所以我已经两次发送了hello)到该对象。 / p>

是的,确实如此。只有它bind maphello,而原始调用确实在Object.keys(hello)数组上应用了map - 方法中的this value呼叫。所以你需要做

hello.print = Array.prototype.map.bind(Object.keys(hello), print, hello);