我最近在阅读《高效JavaScript》。在关于“使用具有自定义接收器的call方法”的部分,作者提供了一个使用此方法将一个表格的内容添加到另一个表格中的示例:
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);
我以[1,3,Object,Object]的形式获取了table2条目的内容,这让我感到困惑。为什么会有两个额外的对象?可能我的调用方法不正确。有人能解释一下正在发生什么吗?