我正在阅读一篇文章,并遇到了这个函数定义
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;
}
有什么区别?函数定义中没有使用对象的东西,所以为什么要为可变性而烦恼,通常在接收到对象作为参数时使用对象分配。
答案 0 :(得分:3)
第一个函数返回一个proto
为[[Prototype]]
的对象。因此,type
是继承的,而不是返回对象的 own 属性。
第二个函数返回一个具有type
的对象,因为它是 own 属性
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
答案 1 :(得分:1)