扩展数字以获得自然数

时间:2019-02-21 10:31:33

标签: javascript numbers prototype

在阅读了Crockford的JavaScript之后,我对此很感兴趣:好的部分,就是这样做的:

ngOnInit(){
....
}

我可以扩展Number,所以可以使用:

Function.prototype.method=function(name, func){
  this.prototype[name] = func;
  return this
}

44.4.integer(); // 44

但是尝试获取正整数(自然数)时会抛出错误:

Number.method('integer',function(){
  return Math.round(this)
});

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

您可以像这样使用它:

console.log((-44.4).natural());

您的问题是44.4.natural()首先被执行,然后您将其打印为负数。

    Function.prototype.method=function(name, func){
      this.prototype[name] = func;
      return this
    }
    Number.method('natural',function(){
      return Math.round(Math.abs(this))
    });
    
    console.log((-44.4).natural());

答案 1 :(得分:1)

当您说“错误”时,我认为您的意思是“错误的结果”。

问题是-44.4.natural()实际上是-(44.4.natural())。如果您在this方法中查看natural,您会发现它是44.4,而不是-44.4

JavaScript没有负数文字格式。它改用否定运算符。优先规则意味着方法调用首先完成,然后取反。

如果要使用-44.4作为值,请将其放在变量中:

let a = -44.4;
console.log(a.natural()); // 44.4

实时示例:

Function.prototype.method=function(name, func){
  this.prototype[name] = func;
  return this
}

Number.method('natural',function(){
  return Math.abs(this)
});

let a = -44.4;
console.log(a.natural());

或使用()

console.log((-44.4).natural()); // 44.4

实时示例:

Function.prototype.method=function(name, func){
  this.prototype[name] = func;
  return this
}

Number.method('natural',function(){
  return Math.abs(this)
});

console.log((-44.4).natural()); // 44.4