如果我没有弄错,使用Object.setPrototypeOf()和__proto__更改对象原型被认为是“非常慢的操作”。而且,IIRC,这会降低V8中对象的性能。
此外,通常不建议在创建对象之后添加属性,因为它也会降低V8中对象的性能(如果我正确理解这这样的解释的话)。
因此,如果我需要创建一个具有定义的原型和属性的对象,我有两个选项:
Object.create()。这是相当麻烦的方式。__proto__和属性的文本对象。因此,问题是:这两种选择在性能上是否相等?或者第二种方法只是内部延迟的Object.setPrototypeOf()操作的语法糖?第二条路有什么缺点吗?这些缺陷是依赖于实现的还是公共的(规范依赖的?)
UPD
另见跨岗位讨论:
https://github.com/nodejs/help/issues/2901
https://twitter.com/vsemozhetbyt/status/1292057058213269504
一个幼稚的基准:https://github.com/nodejs/help/issues/2901#issuecomment-671027781
发布于 2020-08-08 13:04:01
发布于 2020-08-08 11:05:24
"__proto__慢“是错误的信息。在内部,当您创建一个对象时,它具有[ prototype ]属性,该属性被设置为它的原型。
function Product(price,title){
this.Price = price;
this.Title = title;
}
Product.prototype.owner = "foo";
let p1 = new Product(10, "pen");
p1.__proto__ === Product.prototype; // true 因此,如果您想要从另一个对象文本创建一个对象,那么您只有两个选择,要么使用Object.create,要么手动设置__proto__。
另一种选择是使用构造函数,如我前面所示。
https://stackoverflow.com/questions/63314486
复制相似问题