Javascript 在对象文本中使用`\\\\\\\`
如果我没有弄错的话,使用Javascript 在对象文本中使用`\\\\\\\`,javascript,node.js,object,inheritance,v8,Javascript,Node.js,Object,Inheritance,V8,如果我没有弄错的话,使用Object.setPrototypeOf()和\uuuu proto\uuuu来更改对象原型被认为是一种“非常缓慢的操作”,不推荐使用。此外,这可能会降低V8中对象的性能 另外,通常不建议在创建对象后向对象添加属性,因为这也会降低V8中对象的性能(如果我正确理解了类似的解释) 因此,如果需要创建具有已定义原型和属性的对象,我有两个选项: Object.create(),同时设置了原型和属性描述符参数。这是相当麻烦的方式 带有\uuuu proto\uuuu和属性的对象
Object.setPrototypeOf()
和\uuuu proto\uuuu
来更改对象原型被认为是一种“非常缓慢的操作”,不推荐使用。此外,这可能会降低V8中对象的性能
另外,通常不建议在创建对象后向对象添加属性,因为这也会降低V8中对象的性能(如果我正确理解了类似的解释)
因此,如果需要创建具有已定义原型和属性的对象,我有两个选项:
Object.create()
,同时设置了原型和属性描述符参数。这是相当麻烦的方式
\uuuu proto\uuuu
和属性的对象文字
对象.setPrototypeOf()
操作内部的语法糖?第二种方法有缺点吗?这些缺点是依赖于实现还是常见(依赖于规范?)
UPD
另见交叉帖子中的讨论:
一个简单的基准:“\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。在内部创建对象时,对象具有设置为其原型的[[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
因此,如果您想从另一个对象文本创建对象,您只有两个选择,要么使用对象。创建,要么手动设置\uuuuuuuuuuuu
另一种选择是使用构造函数,正如我在上面所显示的那样,因为它不应该是语言的一部分(而是保留用于backcompat)
另一方面,setPrototypeOf
并没有被弃用,只是因为它的存在而被轻视。然而,在新的对象上调用它并不是一个大问题,还没有什么可以去优化的,对象的使用将根据新的原型进行优化
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.setPrototypeOf({…}, proto)
Object.assign(Object.create(proto), {…})