我最近正在阅读“Effective javascript”。在“使用自定义接收器的调用方法”项中。作者提供了一个使用这种方法将一个表的内容添加到另一个表的示例:
var table = {
entries: [],
addEntry: function(key, value) {
this.entries.push({key: key, value: value});
},
forEach: function(f, thisArg) {
var entries = this.entries;
for (var i = 0, n = entries.length; i < n; i++)
{
var entry = entries[i];
f.call(thisArg, entry.key, entry.value, i);
}
}
};
现在,如果我测试这个方法,编写如下内容:
table2 = table;
table1 = table;
table1.entries = [1, 3];
table1.forEach(table1.addEntry, table2);
console.log(table2.entries);
我将 table2 条目的内容作为 [1, 3, Object, Object]。这让我很困惑。为什么我们会得到这两个附加对象。可能是我没有正确获取调用方法。有人可以向我解释发生了什么吗?