var与函数,对于常量和方法更好

时间:2015-09-09 19:34:02

标签: javascript node.js function variables methods

这是在nodejs应用程序中,也可能成为Chrome打包应用程序。以下哪项更适合用于设置在应用程序中使用的常量和方法?

// HARDWARE SETTINGS AND SCALING FACTORS \\
function GPIO8() {
  this.sensorType     = "I/O board";
  this.name           = "XYZ Co. 8 Channel USB GPIO Module";
  this.info           = "GPIO, 10 bit, 0-5V ADC (Analog to Digital Converter)";
  this.voltSupply     = 5.15; // Measure with multimeter and set this constant.
  this.vMin           = 0;    // lowest output voltage.
  this.vMax           = 1023; // highest output voltage. (10bit = 2^10)
  this.scalingFactor  = function ( ) {
                          return this.voltSupply / (this.vMax - this.vMin);
                        };
  this.voltScaled     = function (adcReading) {
                          return parseFloat(adcReading, 10) * this.scalingFactor();
                        };
}

还是这个?

// HARDWARE SETTINGS AND SCALING FACTORS \\
var GPIO8 = {
  sensorType     : "I/O board",
  name           : "XYZ Co. 8 Channel USB GPIO Module",
  info           : "GPIO, 10 bit, 0-5V ADC (Analog to Digital Converter)",
  voltSupply     : 5.15, // Measure with multimeter and set this constant.
  vMin           : 0,    // lowest output voltage.
  vMax           : 1023, // highest output voltage (10bit = 2^10)
  scalingFactor  : function ( ) {
                    return this.voltSupply / (this.vMax - this.vMin);
                    },
  voltScaled     : function (adcReading) {
                    return parseFloat(adcReading, 10) * this.scalingFactor();
                    }
}

两者都在应用程序中工作。 我们有10个不同的硬件,每个硬件都有不同的范围,缩放因子和方法。其他硬件各有几个常量。以上是最简单的。在我设置其他9之前,我想要正确开始。

我读到它们都是对象而var与功能并不重要。我不是专业编码员。这种特定用法的首选方法是什么? (过于主观的问题?)

其次,scaleFactor()和voltScaled(...)更好地作为这些对象中的方法或作为对象之外的单独函数。 (我希望我的术语正确无误。)

1 个答案:

答案 0 :(得分:1)

如果您要创建多个相同类型的对象,该函数会更方便。这是经典的面向对象。如果您要拥有多个GPIO8个对象,则可以调用new GPIO8(/* some specific settings */),然后使用各种方法设置对象的原型,这些方法将在所有GPIO8个对象中通用。

但是,在您的情况下,看起来GPIO8将是其类型中唯一的一个,因此文字对象表示法(您展示的第二个示例)可能很好。

如果我是你,我可能会花一些时间研究JavaScript继承,即Object.prototype。然后,您可以决定GPIO8是否属于另一个班级等。

TL; DR:如果您需要类似对象的“工厂”

,函数符号将会很有用