创建一个新的变量类型,扩展一个在Javascript中将字符串转换为float的对象

时间:2017-01-17 15:59:46

标签: javascript angularjs

在我的应用程序中,我正在编写很多公式,这使得调试这些公式变得非常棘手,因为我正在从混合字符串和数字格式解析数据(所以我必须单独解析每个变量)。

这样的事情:

function num(n) { return parseFloat(n) || 0; }

var result = (num(width) * num(height)) + num(volume)

我认为如果能做到这样的事情会更好看:

(width.n() * height.n()) + volumn.n()

所以我试图了解有关对象和类的更多信息,并创建一个允许n()方法的新对象类型。

这就是我的尝试:

class NumObject extends Object {
  constructor() {
    this.n = function() {
      return num(this);
    }
  }
}

但我在控制台中收到此错误消息:

Error: |this| used uninitialized in NumObject class constructor

我是新手使用这样的对象和类,所以我不确定这样做的正确或最佳方式。

2 个答案:

答案 0 :(得分:0)

如果你扩展另一个类,你必须先在构造函数中调用super()

class NumObject extends Object {
  constructor() {
    super();
    this.n = function() {
      return num(this);
    }
  }
}

无论哪种方式,都不需要扩展Object,也不需要将方法放在构造函数中。只是做:

class NumObject {
  n() {
   // your code here
  }
}

答案 1 :(得分:0)

我认为prototyping正是您所寻找的。

Object.defineProperty( NumObject.prototype, 'n', {
  value: function(){
    // your logic
  },
  enumerable: true,
  configurable: true,
  writable: true
});

没有经过测试,但这应该会让你朝着正确的方向前进

如果您真的想使用继承更改,请编写代码:

class NumObject extends Object {
  n () {
    //...
  }
}

请注意,整个constructor(){super()}都是可选的。