【问题标题】:How to access private method from another private method in Javascript如何从 Javascript 中的另一个私有方法访问私有方法
【发布时间】: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:你确定不是吗? densitylift 在同一范围内,所以没问题。听起来更像是您没有将有效数字传递给函数。
  • lift 正在呼叫density;如果您将alertconsole.log 放在density 的顶部,您会发现这是真的。问题很可能是您被零除,即lift 返回0
  • @Domenic: "dry air" 不是一个有效的数字,这就是它返回 NaN 的原因(你的情况)。 0 的划分返回 Infinity

标签: javascript oop private


【解决方案1】:

您正在使用gas 数组覆盖您传递给density 函数的参数。

看,我重命名后它就可以正常工作了!

http://jsfiddle.net/pEcMJ/

【讨论】:

  • 哇。我什至不认为是这样。感谢您指出我的问题!
  • @josh 不,你只是 。 :-)
【解决方案2】:

您正在使用对象var gas ={} 重新定义方法参数function density( altitude, gas )

【讨论】:

    【解决方案3】:

    这一行产生 NAN

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

    gas[gas] :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-11
      • 2021-11-13
      相关资源
      最近更新 更多