Javascript 在ES6类语法中,为什么setPrototypeOf()和其他类似方法不';T

Javascript 在ES6类语法中,为什么setPrototypeOf()和其他类似方法不';T,javascript,inheritance,ecmascript-6,Javascript,Inheritance,Ecmascript 6,当我阅读MDN()关于在类中继承属性的内容时,他们说我需要使用Object.setPrototypeOf() 教材{ 建造师(职称){ this.name=“Book”; this.title=标题; } } Object.setPrototypeOf(Book.prototype{ 声明:“哦”, 国家:“美国” }) let newBook=新书(“洛丽塔”) console.log(newBook.state)//OH当您使用类语法时,生成的构造函数的原型属性是不可写且不可配置的。这意味

当我阅读MDN()关于在类中继承属性的内容时,他们说我需要使用
Object.setPrototypeOf()

教材{
建造师(职称){
this.name=“Book”;
this.title=标题;
}
}
Object.setPrototypeOf(Book.prototype{
声明:“哦”,
国家:“美国”
})
let newBook=新书(“洛丽塔”)

console.log(newBook.state)//OH
当您使用
语法时,生成的构造函数的
原型
属性是不可写且不可配置的。这意味着您不能通过赋值表达式或
对象为其赋值。defineProperty

类书{}

log(Object.getOwnPropertyDescriptor(Book'prototype')使用
语法时,生成的构造函数的
原型
属性是不可写且不可配置的。这意味着您不能通过赋值表达式或
对象为其赋值。defineProperty

类书{}

log(Object.getOwnPropertyDescriptor(Book'prototype')
So
Object.setPrototype()
之所以有效,是因为它重写了整个原型,而
Object.create()
并不是因为它只为它分配了新的值,对吗?它之所以有效,是因为它(在内部)变异了
Book.prototype
的值,它不创建(并分配)一个新对象。即
var obj={};var-oldObj=obj;setPrototypeOf(obj,{});console.log(obj==oldObj)
true
vs
var obj={};var-oldObj=obj;obj=Object.create({});console.log(obj==oldObj)
false
。我添加了一个子类,发现
Object.create()
在本例中适用于该子类。这与您上面写的内容有冲突吗?没有。
LibraryBook.prototype=Object.create(Book.prototype)
没有效果。您可以删除它并获得相同的结果
LibraryBook.prototype
已经是一个对象,其原型为
Book.prototype
。这就是
。。。扩展书本
子句<代码>类书{};类LibraryBook扩展了Book{};console.log(Object.getPrototypeOf(LibraryBook.prototype)==Book.prototype)
真的
。我在MDN中读到使用
Object.setPrototypeOf()
会影响性能。有没有办法避免这个问题。在类中设置私有或公共变量不是标准化的yetSo
对象。setPrototype()
之所以有效,是因为它重写了整个原型,而
对象。create()
并不是因为它只为其分配了新值,对吗?它之所以有效,是因为它(在内部)变异了
Book.prototype
的值,它不会创建(并指定)新对象。即
var obj={};var-oldObj=obj;setPrototypeOf(obj,{});console.log(obj==oldObj)
true
vs
var obj={};var-oldObj=obj;obj=Object.create({});console.log(obj==oldObj)
false
。我添加了一个子类,发现
Object.create()
在本例中适用于该子类。这与您上面写的内容有冲突吗?没有。
LibraryBook.prototype=Object.create(Book.prototype)
没有效果。您可以删除它并获得相同的结果
LibraryBook.prototype
已经是一个对象,其原型为
Book.prototype
。这就是
。。。扩展书本
子句<代码>类书{};类LibraryBook扩展了Book{};console.log(Object.getPrototypeOf(LibraryBook.prototype)==Book.prototype)
真的
。我在MDN中读到使用
Object.setPrototypeOf()
会影响性能。有没有办法避免这个问题。在类中设置私有或公共变量尚未标准化