我需要在另一个对象中插入一个对象,我使用以下逻辑:
// Create object store
const store = {}
// Function to create 'Product' Objects
function createProduct (type, name, price) {
return { type, name, price }
}
// Function to add 'Product' Objects inside the 'Store' Object
function addToStore (obj) {
store.obj = obj
return store
}
const strawberry = createProduct ('fruit', 'strawberry', '0.40')
const peach = createProduct ('fruit', 'peach', '0.80')
addToStore(strawberry)
addToStore(peach)
console.log(store) // < { obj: { type: 'fruit', name: 'peach', price: '0.90' } }
我应该如何编写此函数以使store.obj与参数传递的obj相同?
function addToStore (obj) {
store.obj = obj
return store
// What's happening in the run
function addToStore (peach) {
store.obj = peach
return store
// What I need to happen
function addToStore (peach) {
store.peach = peach
return store
1条答案
按热度按时间mbzjlibv1#
如果您的意思是希望属性名来自调用时使用的变量名
addToStore
,你不能这么做,因为addToStore
调用时,它只接收该变量的值(对对象的引用),而不接收有关该变量本身的任何信息。简单的解决方案是将名称作为第二个参数传递:
注意使用
[]
使属性名称来自name
参数而不是使用.
使用文字名称。有一种方法可以通过使用速记属性语法,以(非常小的)创建临时对象的成本,使其更加自动化。在所需对象周围传递一个对象 Package 器,其中属性的名称来自变量名,并且
addToStore
从该 Package 器中获取对象(或者,如果传递多个对象,则可能获取所有对象):您可能不想在一个小时内执行数百万次的代码中执行此操作,因为会有开销,但除此之外,我不会担心它,直到/除非您遇到性能问题,您可以找到它。