javascript - 这两个函数定义有什么区别

标签 javascript performance

我正在阅读一篇文章,发现了这个函数定义

const circle = (radius) => {
  const proto = { 
    type: 'Circle',
  }
  return Object.assign(Object.create(proto), {radius})
}

为什么他们使用 Object.assign,据我所知,他们使用它来实现不变性 但如果他们使用这个

const circle = (radius) => {
  const proto = { 
    type: 'Circle',
    radius
  }
  return proto;
}

有什么区别?函数定义中没有任何内容使用对象,所以为什么我们要担心可变性,通常我们在接收对象作为参数时使用对象分配。

最佳答案

第一个函数返回一个带有 proto 的对象,因为它是 [[Prototype]]。因此,type 是继承的,而不是返回对象的自己属性。

第二个函数返回一个类型的对象,因为它是自己的属性

const circle = (radius) => {
  const proto = { 
    type: 'Circle',
  }
  return Object.assign(Object.create(proto), {radius})
}

const obj = circle(5);

console.log( obj.hasOwnProperty("type") ) // false 
console.log( Object.getPrototypeOf(obj).hasOwnProperty("type") ) // true

const circle = (radius) => {
  const proto = { 
    type: 'Circle',
    radius
  }
  return proto;
}

const obj = circle(5);

console.log( obj.hasOwnProperty("type") ) // true
console.log( Object.getPrototypeOf(obj) === Object.prototype) // true

关于javascript - 这两个函数定义有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57717032/

相关文章:

android - 为什么反射会减慢android手机的速度

java - 使用 jpexport 时出错(导出 jprofiler .jps 文件)

python - 在 Python 中统一列表的最快方法

javascript - SettimeOut 间隔失败,出现 "Cannot convert undefined or null to object"

javascript - 如何添加到 Vue Class Bindings 的数量?

javascript - Jquery 删除不适用于克隆

javascript - 谷歌脚本: Script to create calendar event runs without error but does nothing

javascript - 如何在不刷新页面的情况下发送表单数据?

mysql - 我怎样才能让这个查询运行得更快?

Objective-C:从数字映射到 NSDictionary 中相应的 NSRange 的最有效方法