在对象中使用数学运算
这是JS中的单位转换器。当有人转换音量时,输入音量首先转换为升,然后转换为其他任何单位。计算值自动显示在输入栏中。为此目的,我创建了一个对象来存储转换值,就像这样:在对象中使用数学运算
var volumes={
cbm: 1000,
ltr: 1,
ml: 0.001,
barrel: 158.9873,
gal: 3.785411784,
pint: 0.473176473,
floz: 0.0295735295625,
//and so on
};
而对于一个系统的单位之间的转换,我想这一点:
var volumes={
impfloz: 0.0284130642624675,
imppint: this.impfloz*20,
impbarrel: this.impfloz*5600,
impgal: this.impfloz*160
};
但它没有工作。当我输入一个值时,例如在输入字段“Imperial-Barrel”中,所有其他输入字段显示:NaN。我真的必须为每个函数编写函数吗?这会使代码更复杂,更难以阅读。有没有办法让对象成员自动应用所需的数学运算?
不,你不能这样做。但是如果你担心污染与impfloz
变量全局命名空间中有什么错
var impfloz = 0.0284;
var volumes={
impfloz: impfloz,
imppint: impfloz*20,
impbarrel: impfloz*5600,
impgal: impfloz*160
};
,你可以包住整个事情在IIFE。
this
仅在一个函数中有意义,它指的是函数被调用的对象。
感谢您的信息。它的作品,但我认为它不是很优雅...但你能解释我为什么,当我在桶字段中输入1000亿,加仑字段显示34999999999999.99.99而不是35000000000000?我的意思是这就是我试图这样做的原因。 JS会自动切断一些小数,如果是的话,有什么办法来防止这种情况? – quaductas 2014-09-05 18:00:24
@quaductas JS数字是“双精度浮点数”,它们的上限约为2^53,如果你需要更高的值,你必须使用一个库。 – 2014-09-05 19:56:37
请参阅[对象字面声明中的自引用](http://stackoverflow.com/a/4616273/218196) – 2014-09-05 17:42:56