作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们有这个功能
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/
我们有这个功能 function Buffer(initValue) { this.append(initValue); } Buffer.prototype = { items: [
我是一名优秀的程序员,十分优秀!