gpt4 book ai didi

javascript - javascript调用方法的奇怪行为

转载 作者:行者123 更新时间:2023-11-29 10:46:25 24 4
gpt4 key购买 nike

我最近在读“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]。这让我很困惑。为什么我们得到这两个额外的对象。可能是我没有正确获取调用方法。有人可以向我解释发生了什么吗?

最佳答案

原因是

table2 = table;
table1 = table;

table2table1 引用同一个对象 => 您正在添加到同一个 table 对象。

你得到最后两个对象是因为你的添加条目创建了新对象:

{key: key, value: value}

您的最终结果如下所示:

[1, 3, {0:1}, {1:3}]

{0:1},{1:3}:0,1是索引

关于javascript - javascript调用方法的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18672254/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com