我如何用它自己的属性来操纵我的对象[重复]

问题描述 投票:0回答:1

目前正在学习JS,我是一个初学者。 我创建了一个要修改的对象,我想给它一些依赖于同一对象的先前属性的属性。

我已经通过努力解决了这个问题,我知道,我确信在对象定义中有一种方法可以做到这一点。

请帮助我,作为初学者,我不知道在谷歌搜索时使用哪些关键词,所以这是我最好的选择。

通过这样做:


airMax1 = {
    price : 200,
    appreciation : 8,
    taxRate : 0.2,
    realPrice : ((this.price+this.appreciation)*this.taxRate)+this.price+this.appreciation,
}
console.log(airMax1)

console.log(airMax1.realPrice)

我期待这个输出:

 { price: 200, appreciation: 8, taxRate: 0.2, realPrice: 249.6 } 249.6

但我得到的是这样的:

{ price: 200, appreciation: 8, taxRate: 0.2, realPrice: NaN }
NaN

但是当我像这样做不同的事情时:

airMax1 = {
    price : 200,
    appreciation : 8,
    taxRate : 0.2,
}

airMax1.realPrice=((airMax1.price+airMax1.appreciation)*airMax1.taxRate)+airMax1.price+airMax1.appreciation

console.log(airMax1)

console.log(airMax1.realPrice)

它有效并给了我

的离散输出
{ price: 200, appreciation: 8, taxRate: 0.2, realPrice: 249.6 }
249.6

同一个数学公式如何在对象外部产生一个数字,而在对象内部却不能产生数字。

我已将对象名称与 this 交换。方法及全部

javascript object javascript-objects
1个回答
0
投票

您可以创建一个工厂,通过使用辅助函数动态添加计算属性来生成增强对象。

const addComputedProperty = (receiver, name, getter) => {
  Object.defineProperty(receiver, name, {
    get: getter.bind(receiver),
    enumerable: true // Ensure the property is visible
  });
};

const ProductFactory = {
  create({ price, appreciation, taxRate }) {
    const product = { price, appreciation, taxRate };
    
    addComputedProperty(product, 'realPrice', function() {
      return ((this.price + this.appreciation) * this.taxRate) + 
             this.price + this.appreciation;
    });

    return product;
  }
};

const airMax1 = ProductFactory.create({ price: 200, appreciation: 8, taxRate: 0.2 });

console.log(airMax1); // { price: 200, appreciation: 8, taxRate: 0.2, realPrice: 249.6 }
console.log(airMax1.realPrice); // 249.6

© www.soinside.com 2019 - 2024. All rights reserved.