感谢所有回答这个问题的人。
为什么此代码返回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);
是因为参考,你们能解释吗
1-foo和bar都指向同一个对象,即options
。
2-它们指向相同的传递值name
。
3-foo和bar都是对象,所以它们是引用。
4-并且它们包含名为options
的对象,该对象也引用。
5-因此,当我们在foo中的任何一个中更改options
对象中的name
值时,它将在资助Person
函数的所有创建对象中更改为options
对象name
值。
我想这就是答案
因为当您实例化foo和bar时,它们会生成Person.prototype.options对象的浅拷贝。
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");
// are foo.options and bar.options pointing to the same options object?
console.log(foo.options===bar.options)
如您所见,foo.options===bar.options
返回true。