首先,我在很多地方都搜索過這個,但是找不到合適的答案,但我也意識到這可能只是我的失敗。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