目前正在学习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 交换。方法及全部
您可以创建一个工厂,通过使用辅助函数动态添加计算属性来生成增强对象。
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