我正在阅读一篇文章,发现了这个函数定义
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/