2014-10-29 63 views
0

可以说,我想要在javascript中为所有“数字”添加一项功能,以便拥有一个名为“阶乘”的函数。因此,举例来说:如何在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); 
    } 
}) 

显然,这会返回一个错误,指出该功能“因子”不存在。如何解决这个问题?

+0

也许你应该使用this.factorial而不是阶乘? – 2014-10-29 09:35:44

回答

3

这应该做的伎俩:

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

至于你提到的factorial是你的问题一个未定义的功能,但它Number原型的功能。
因此,你想要做的是在递归中拨打factorial号码this - 1

为了能够调用this - 1上的功能,您可以将其包装在一些括号()中。

+0

那么,@ kaizer1v,为你做了这个工作? – Cerbrus 2014-10-29 10:16:52

+0

是的,它的确如此。非常感谢。 – kaizer1v 2014-10-29 11:48:45