JS关于原型继承



为什么此代码返回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。

最新更新