2014-10-29 48 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