javascript - 如何在 Javascript 原型(prototype)函数中编写递归函数?

标签 javascript numbers prototype

可以说,我正在尝试向 javascript 中的所有“数字”添加一个功能,以拥有一个名为“阶乘”的函数。因此,例如:

var num = 5
console.log( num.factorial() ) // should display 120

为了实现这一点,这里是以下函数

Object.defineProperty(Number.prototype, "factorial", {
  enumerable: false,
  value: function() {
    if(this <= 1) return 1;
    return this * factorial(this - 1);
  }
})

显然,这将返回一个错误,指出函数“factorial”不存在。如何解决这个问题?

最佳答案

这应该可以解决问题:

Object.defineProperty(Number.prototype, "factorial", {
    enumerable: false,
    value: function() {
        if(this <= 1)
            return 1;
        return this * (this - 1).factorial();
    } //                   ^
});

正如您所提到的,factorial 在您的问题中是一个未定义的函数,但它Number 原型(prototype)上的一个函数。
因此,您要做的就是在递归中对数字 this - 1 调用阶乘。

为了能够调用 this - 1 上的函数,您只需将其括在一些括号 () 中即可。

关于javascript - 如何在 Javascript 原型(prototype)函数中编写递归函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26626746/

相关文章:

javascript - 为什么我的构造函数没有继承 super 构造函数的方法?

javascript - 将使用 'new' 关键字的 Javascript 函数表达式视为 'static' 是否正确

c# - C# 的随机数生成器是如何工作的?

c++ - 计算数字的质数除数(不相异)的总和的有效替代方法,直到 num

string - 将数字格式化为带有千位分隔符的字符串,并且在 swift 中小数点后始终有 2 位数字

perl - 如何在没有 "called too early to check prototype"的情况下声明函数并递归使用它

javascript - 使用 Require JS 扩展 Backbone 对象的正确方法

java - ExtJs Combobox 显示字段编码

javascript - 如何使用 jQuery 停止动画

javascript - 在Javascript中,为什么要将引用类型的实例变量放在构造函数中?