2011-07-08 115 views
0

我想知道是否可以从Javascript上的另一个私有方法调用私有方法。我有一个像下面的一些代码:如何从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,但不知道这是如何处理这一个。

+0

您的代码看起来不错。什么没有关于它的工作? – Domenic

+0

我呼吁balloon.requiredGas并获得NaN。 lift()不调用密度()。 –

+1

@KyleHotchkiss:你确定它不是? “密度”与“升力”的范围相同,所以没有问题。这听起来更像是你没有传递有效的数字给函数。 –

回答

5

您使用gas数组覆盖了通过density函数传递的参数。

看到它,它工作正常后,我重命名!

http://jsfiddle.net/pEcMJ/

+0

哇。我甚至不认为是这样。感谢您指出我的问题男人! –

+0

@帕特里克McElhaney:谢谢,我现在有点分散:) –

+0

@josh不,你只是*快*。 :-) –

2

您与对象var gas ={}

1

该生产线生产的NAN

var pressure = alt["p0"] * (1 - ((alt["L"] * altitude)/alt["T0"]))^((alt["g"] * gas[gas])/(alt["R"] * alt["L"])); 

重新定义你的方法参数function density(altitude, gas)这是gas[gas] :)