Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在对象文本中使用`\\\\\\\`_Javascript_Node.js_Object_Inheritance_V8 - Fatal编程技术网

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), {…})