可以说,我正在尝试向 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/