var math = {
Factorial:function(n) {
if (n == 0) {
return 1;
}
return n * Factorial(n - 1);
},
CalculateFactorial:function() {
var myValue = document.getElementById('myTextBox').value;
if (myValue.length == 0) {
alert("Please input the correct value!");
return;
}
var result = Factorial(myValue);
document.getElementById('title').innerHTML = result;
}
}
大家好。新的JavaScript和测试不同的东西,来自C#语言的东西是相同但不同的。
我正在尝试做某事但没有成功。
将上面的脚本附加到一个简单的html按钮,尝试调用CalculateFactorial,math.CalculateFactorial();但是奇怪的是,CalculateFactorial()实际上并没有看到Factorial()方法。但在数学对象中,我可以看到两种方法。奇怪的。
“JavaScript运行时错误:'Factorial'未定义”
答案 0 :(得分:1)
JavaScript中的一个好习惯是命名所有函数,即使将它们分配给变量或使用它们像object的属性。在您的情况下,只需为Factorial
函数命名,如下所示:
Factorial:function factorial(n)
{
if (n == 0)
{
return 1;
}
return n * factorial(n - 1);
},
对于Factorial
函数中未看到CalculateFactorial
的问题,请在调用时使用this.Factorial
。
答案 1 :(得分:0)
这应该可以解决问题......如果你想让Factorial成为一个内部唯一的函数(只是暴露的CalculateFactorial的一个实用程序),那么你可以这样做:
@Async
这里更深层次的设计问题是这不是特别可重用的javascript。你应该考虑将CalculateFactorial()从数学对象中拉出来并放入它自己的处理程序......可能是一个点击处理程序就像这样:
var math = new function() {
var $this = this;
var Factorial = function(n) {
if (n == 0) {
return 1;
}
return n * Factorial(n - 1);
}
$this.CalculateFactorial = function() {
var myValue = document.getElementById('myTextBox').value;
if (myValue.length == 0) {
alert("Please input the correct value!");
return;
}
var result = Factorial(myValue);
document.getElementById('title').innerHTML = result;
}
}
答案 2 :(得分:0)
这种情况发生的原因是math
方法是ReferenceError
对象的一部分,并且它不会驻留在全局范围内。当您尝试直接调用它时,解析器将尝试在全局范围内找到该方法,然后,它将抛出this
。
由于您在对象内部使用了该方法,因此可以使用Factorial
关键字,因为它会查看对象的上下文并找到方法Factorial
。
调用math.Factorial
方法的另一种方法是使用对象,例如:var math = {
Factorial: function(n) {
return n === 0 ? 1 : n * this.Factorial(n - 1);
},
CalculateFactorial: function(txt) {
document.getElementById('title').innerHTML = this.Factorial(txt.value);
}
};
document.getElementById('myTextBox').addEventListener('input', function() { math.CalculateFactorial(this); });
。
看一下下面的例子:
<input type="text" id="myTextBox" placeholder="Fatorial">
<div id="title"></div>
&#13;
{{1}}&#13;