在我的应用程序中,我正在编写很多公式,这使得调试这些公式变得非常棘手,因为我正在从混合字符串和数字格式解析数据(所以我必须单独解析每个变量)。
这样的事情:
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
我是新手使用这样的对象和类,所以我不确定这样做的正确或最佳方式。
答案 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
正是您所寻找的。 p>
Object.defineProperty( NumObject.prototype, 'n', {
value: function(){
// your logic
},
enumerable: true,
configurable: true,
writable: true
});
没有经过测试,但这应该会让你朝着正确的方向前进
如果您真的想使用继承更改,请编写代码:
class NumObject extends Object {
n () {
//...
}
}
请注意,整个constructor(){super()}
都是可选的。