【发布时间】:2022-10-13 06:06:55
【问题描述】:
为什么这段代码会返回两次bar,而不是foo,然后是bar?
function Person(name) {
if (name) this.options.name = name;
}
Person.prototype.options = {
name: "Default name"
};
var foo = new Person("foo");
var bar = new Person("bar");
console.log(foo.options.name);
console.log(bar.options.name);
这样做是因为参考,你们能解释一下吗
【问题讨论】:
-
this.options指原型中的options对象,这是Person的所有实例的公共对象。像这样:this.name = name || this.options.name;,这样您就可以从选项中读取默认名称,并为每个实例指定一个单独的名称(如果它通过了)。 -
提示:在脚本末尾运行:
console.log( "Object.is: %o", Object.is( foo.options, bar.options ) );- 它将打印"Object.is: true。 -
options = { name: "Default name" }; foo = options; bar = options; foo.name = "foo"; bar.name = "bar";基本上和你的代码一样。修改同一个对象会导致...修改同一个对象。 -
@VLAZ我认为OP希望在
Person构造函数运行时复制原型对象(a-laObject.assign)。我承认我已经忘记了如何使用prototype这样的实例别分享状态...
标签: javascript reference prototype