Когда я читаю MDN (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes#Sub_classing_with_extends) о наследовании свойства в классе, они говорят, что мне нужно использовать Object.setPrototypeOf()
class Book {
constructor(title) {
this.name = "Book";
this.title = title;
}
}
Object.setPrototypeOf(Book.prototype, {
state: 'OH',
country: 'US'
})
let newBook = new Book('Lolita')
console.log(newBook.state) //OH
Но когда я проверяю MDN о Object.setPrototypeOf()
, они говорят, что он медленный и должен использовать какой-то другой, например Object.create()
.Но когда я пытаюсь это не работает
class Book {
constructor(title) {
this.name = "Book";
this.title = title;
}
}
Book.prototype = Object.create({
state: 'OH',
country: 'US'
})
let newBook = new Book('Lolita')
console.log(newBook.state) //undefined
Я думаю, что это довольно странно, поскольку обычный синтаксис прототипа Object.create()
работает хорошо.А Book.prototype - это объект, поэтому я не вижу причин, по которым я не могу добавить такой прототип.
Примечание : после прочтения первого ответа от @Felix это кажетсяразумный.Но когда я попытался немного изменить код, я нашел другое место, где он не должен работать, а получается, что он работает
class Book {
constructor(title) {
this.name = "Book";
this.title = title;
}
}
Object.setPrototypeOf(Book.prototype, {
state: 'OH',
country: 'US'
})
class LibraryBook extends Book{}
LibraryBook.prototype = Object.create(Book.prototype)
let firstBook = new LibraryBook('Lolita')
console.log(firstBook.state)
Можете ли вы объяснить мне этот случай, почему он работает?