4 回答

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超5個(gè)贊
因此,通常當(dāng)我使用時(shí),我會(huì)傳遞一個(gè)對象以在原型中使用。您當(dāng)前正在將函數(shù)作為參數(shù)傳遞。這種方式有效Object.create()
const Person = function(name, age, city) {
this.name = name;
this.age = age;
this.city = city
}
const person2 = Object.create(new Person());
person2.name = "Will";
person2.age=41;
person2.city="San Jose";
Object.values(person2);
這可能與函數(shù)本身有自己的屬性這一事實(shí)有關(guān)?但我不太確定name
編輯:
確認(rèn)只是因?yàn)槊Q屬性,將名稱更改為標(biāo)題以避免混淆:
const Person = function(title, age, city) {
this.title = title;
this.age = age;
this.city = city
}
const person2 = Object.create(Person);
person2.title = "Will";
person2.age=41;
person2.city="San Jose";
Object.values(person2);
// ["Will", 41, "San Jose"]

TA貢獻(xiàn)1946條經(jīng)驗(yàn) 獲得超3個(gè)贊
Object.create
創(chuàng)建一個(gè)新對象,將給定對象作為其 .[[prototype]]
您在此處嘗試錯(cuò)誤地繼承屬性。您正在創(chuàng)建具有構(gòu)造函數(shù)作為其原型的對象。所有函數(shù)都有一個(gè)名為 的不可枚舉和不可寫屬性。你可以看到person2
Person
name
Object.getOwnPropertyDescriptor(Person, "name")
該線路實(shí)際上試圖覆蓋此屬性,并且不執(zhí)行任何操作。也有效地成為一種功能。person2.name = "Will";
person2
在這里,正確的用法是
let person2 = Object.create(new Person());

TA貢獻(xiàn)1786條經(jīng)驗(yàn) 獲得超13個(gè)贊
Object.create 需要一個(gè)對象來創(chuàng)建另一個(gè)對象。因此,請使用 Person 函數(shù)返回對象。它應(yīng)該看起來像這樣:
let Person = function(name, age, city) {
return {
name,
age,
city
};
}
// Using 'new' operator (working)
let person1 = new Person("Jack Rabit", 40, "Seattle");
let person2 = Object.create(Person());
person2.name = "Will";
person2.age=41;
person2.city="San Jose";

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超7個(gè)贊
Object.create需要一個(gè)對象來創(chuàng)建另一個(gè)對象,因此雖然是一個(gè)函數(shù)(確切地說是一個(gè)函數(shù)構(gòu)造函數(shù))也是javaScript中的一個(gè)對象。因此,Object.create不會(huì)抱怨,但是當(dāng)它以這種方式完成時(shí),引擎蓋下發(fā)生了什么:Person
let person2 = Object.create(Person);
person2最終被分配了一個(gè)名為“Person”的函數(shù)的一些屬性(它本身不是一個(gè)函數(shù),它不能被調(diào)用),這可以在這里看到:
// person2.name = 'Person'
// person2() Uncaught TypeError: person2 is not a function at <anonymous>:1:1
作為函數(shù)的繼承屬性之一,其名稱是只讀的,因此不會(huì)產(chǎn)生任何影響。Function.name MDN 文檔person2.name = 'some name'
運(yùn)算符將調(diào)用構(gòu)造函數(shù),構(gòu)造函數(shù)將在繼承構(gòu)造函數(shù)的原型時(shí)返回一個(gè)對象new
添加回答
舉報(bào)