我简直无法理解为什么会出现这个错误.
这是我在chrome控制台上测试的内容:
> var mySet; <- undefined > mySet = new Set; <- Set {} > mySet.add('foo','bar','baz') // Worked as expected <- Set {"foo"} // just the first argument was added > ['bar','baz'].forEach(mySet.add) X-> VM1529:1 Uncaught TypeError: Method Set.prototype.add called on incompatible receiver undefined(…)
提前致谢.
解决方法
在这种情况下,当您将其作为回调传递时,add方法会丢失其内部此上下文,因此您需要使用bind:
['bar','baz'].forEach(mySet.add.bind(mySet))