首先,我在很多地方都搜索过这个,但是找不到合适的答案,但我也意识到这可能只是我的失败。Object.create vs新继承混淆
这有做与“新”创建的对象VS的Object.create()
背景:当使用创建对象的“新”,我得到一个对象,它是原来的副本是充满了原始的属性,但是它是自己的东西。但是,当我使用“Object.create()”创建一个对象时,我得到一个新的对象,它似乎只是指向指定的原型。在新对象中指定值时,这似乎不成问题,因为在新对象内创建了新值。但是,当我将关键值对放入新创建的对象中时,它只影响新对象;然而,如果我用Object.create()创建的对象做同样的事情,它会更改原型,并且共享该原型的所有对象都会受到影响。
问题: 这是正确的行为还是我做错了什么?直觉上,我希望创建的方法,无论任何新对象是独立的“个人”,并分别多变,除非我明确地改变了样机,但是这似乎并不符合的Object.create()
怎么会发生什么我可以使用Object.create()来创建原型的独特实例,并在不影响原型的情况下影响对象吗?或者我应该只是接受这不是Object.create()的行为,而是使用构造函数呢?
下面是一些代码为例:
function NewThing(){
this.testVal = 35;
this.testString = "Default";
this.testObj = {};
}
thing={
testVal: 35,
testString: "Default2",
testObj: {}
}
test1 = new NewThing()
//test1 becomes a new Object with all the properties of NewThing
test2 = Object.create(thing)
// test2 becomes an object that seems to point to the thing object
test3 = Object.create(thing)
// test3 becomes an object that also seems to point to the thing object
test1.testVal = 45
//testVal property of test1 seems changed fine
test2.testVal = 45
//testVal property of test2 seems changed and NOT test 3 which is good
test1.testObj["test"]="is fine"
//puts the pair in the object of test1
test2.testObj["test"]="is NOT fine"
//puts the pair in the PROTOTYPE affecting BOTH test2 and test3
“*当使用创建对象的‘新’,我得到一个对象,它填充了性能的原件及复印件的原始*“ - 呃,不。原件没有任何属性。构造函数是一个*函数*,它*运行*来初始化该对象,并*在该实例上专门创建*这些属性。使用Object.create创建对象后,您可以使用普通函数完成相同的操作。 – Bergi
不确定是否重复或只有帮助,但看看[继承使用Object.create'的好处](http://stackoverflow.com/a/17393153/1048572)和[Prototypal继承 - 嵌套问题对象](http://stackoverflow.com/q/10131052/1048572) – Bergi
@Bergi感谢您的更正。你是对的。 但是,我仍然需要了解用不同方法创建的新对象中的对象的情况。感谢您的链接。我会很快阅读它们。 – Newb1