【发布时间】:2011-10-01 13:55:06
【问题描述】:
我想知道是否可以从 Javascript 上的另一个私有方法调用私有方法。我有一些如下代码:
function Balloon() {
function density( altitude, gas ) {
/* KG/CU M */
var gas = {
/* GAS DEFINATIONS - wolframalpha.com */
"hydrogen" : .00100794,
"helium" : .004002602,
"nitrogen" : .0140067,
"methane" : .0160425,
"ammonia" : .0170305,
"neon" : .0201791,
"dry air" : .0289644
}
var alt = {
/* CONSTANTS - http://en.wikipedia.org/wiki/Density_of_air#Altitude */
"p0" : 101325, // Sea level standard atmospheric pressure (Pa)
"T0" : 288.15, // Sea level standard temperature (K)
"g" : 9.80665, // Earth-surface gravitational acceleration (m/s^2)
"L" : 0.0065, // Temperature lapse rate (K/m)
"R" : 8.31447 // Universal gas constant (mol * K)
}
var temperature = alt["T0"] - alt["L"] * altitude;
var pressure = alt["p0"] * (1 - (( alt["L"] * altitude ) / alt["T0"] )) ^ (( alt["g"] * gas[gas] ) / ( alt["R"] * alt["L"] ));
var density = ( pressure * gas[gas] ) / ( alt["R"] * temperature );
return density;
}
function lift( altitude, gas ) {
/* KG/CU M */
return density( altitude, "dry air" ) - density( altitude, gas );
}
this.requiredGas = function( altitude, gas, ratio, weight ) {
return (( weight / 1000 ) * ratio ) / lift( altitude, gas );
}
}
我正在尝试像这样访问它:
balloon = new Balloon();
var required = balloon.requiredGas(10, "helium", 1.5, 4530);
我看到有人在私有函数like so 之外声明this,但不知道这是否是处理这个问题的方法。
【问题讨论】:
-
您的代码看起来不错。有什么不好的地方?
-
我调用 balloon.requiredGas 并得到一个 NaN。 lift() 没有调用密度()。
-
@KyleHotchkiss:你确定不是吗?
density与lift在同一范围内,所以没问题。听起来更像是您没有将有效数字传递给函数。 -
lift正在呼叫density;如果您将alert或console.log放在density的顶部,您会发现这是真的。问题很可能是您被零除,即lift返回0。 -
@Domenic:
"dry air"不是一个有效的数字,这就是它返回NaN的原因(你的情况)。0的划分返回Infinity。
标签: javascript oop private