gpt4 book ai didi

javascript - 为什么下面的代码没有按预期记录 "onetwo"?

转载 作者:行者123 更新时间:2023-12-03 10:41:52 25 4
gpt4 key购买 nike

我们有这个功能

function Buffer(initValue) {
this.append(initValue);
}
Buffer.prototype = {
items: [],
append: function(str) {
this.items[this.items.length] = str instanceof Buffer ? str.toString() : str;
return this;
},
toString: function() {
return this.items.join("");
}
};
console.log(new Buffer("one").append(new Buffer("two")).toString());

但突然它记录了“onetwoonetwo” - 超出了所有人的预期......为什么?

最佳答案

几个答案解释了为什么在您的特定实例中会发生这种情况。

我怀疑您真正想要的是让 items 位于 Buffer 的每个实例的本地,而不是通过原型(prototype)共享。只需在构造函数中声明 items = []; 即可完成此操作:

function Buffer(initValue) {
this.items = []; // This line replaces `items: [],` in the original code.
this.append(initValue);
}
Buffer.prototype = {
append: function(str) {
this.items[this.items.length] = str instanceof Buffer ? str.toString() : str;
return this;
},
toString: function() {
return this.items.join("");
}
};

关于javascript - 为什么下面的代码没有按预期记录 "onetwo"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28738177/

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