gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 14:15:22 26 4
gpt4 key购买 nike

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

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com