使用JavaScript计算器计算Math.power函数



我正在设计自己的JavaScript计算器,其中的HTML值如下所示:

<input type="button" class="button gray" 
value="tan" onclick='tan()'>
<input type="button" class="button black" value="3" 
onclick='v("3")'>

JavaScript代码看起来像这样:

function tan() {
var getValue = document.getElementById("d").value;
document.getElementById("d").value=Math.tan(getValue);
}
function v(val) {
document.getElementById("d").value+=val;
}

其中ID"d"表示输入一次按下按钮的值的屏幕。

我遇到的问题是让一个按钮使用Math.pow(a,b)函数。一旦你按下值为x^y的按钮,我希望采取以下步骤:

  1. 从元素"d"中获取值
  2. 从按下的下一个按钮中获取值,并在Math.pow()函数中输入该值作为第二个值

我已经完成了第一步,只是还没有弄清楚第二步。我设想的JavaScript代码是这样的:

function power() {
var getValue = document.getElementById("d").value;
......   
......
var powerTotal = Math.pow(getValue,nextValue);
document.getElementById("d").value = powerTotal;
}

(getValue是初始值,nextValue是按下电源按钮后按下的下一个按钮的值)

提前感谢您的帮助!!!

这里有一个潜在的解决方案:

首先,我不确定你是如何组织代码的,但我会把所有的东西都放在某种名称空间下,以防止把所有东西都弄乱。之后,我将拥有映射到每个操作的方法(在return语句中,这些是可以调用的"公共"方法),并将传递到计算器的参数存储在数组中。

var Calculator = (function() {
var _args = [];
var _operation = '';
return {
store: function(val) {
_args.push(val);
},
setOperation: function(op) {
_operation = op;
},
operations: {
pow: function() {
return Math.pow(_args[0], _args[1]);
},
equals: function() {
return this.operations[_operation].apply(this);
}
}
};
}());

这就是魔法发生的地方。在window.onload事件(相当于jQuery的document.ready的香草JS)中,获取输入元素和按钮,并将事件绑定到它们以获得所需的数据。您可以使用onblur来获取输入值,因为当您单击每个按钮时(由于字段失去焦点),该值将激发。单击操作按钮时,存储将要使用的操作字符串,该字符串还映射到您的一个"公共"方法。当单击equals时,您可以调用equals方法,该方法使用Function.prototype.apply()进行一些奇特的JS元编程来调用正确的函数。

window.onload = function() {
var inputField = document.getElementById('d');
var equalsButton = document.getElementById('equals-btn');
var powButton = document.getElementById('pow-btn');
inputField.onblur = function() {
Calculator.store(this.value);
};
powButton.onclick = function() {
Calculator.setOperation('pow');
};
equalsButton.onclick = function() {
// sets the original field to the answer like a real calculator would
inputField.text = Calculator.operations.equals();
};
};

这一切都是我的想法,所以我很有可能在某个地方搞砸了,所以把它当作伪代码,而不是具体的解决方案。要删除的重要内容是存储在序列中输入的数据的方法,以及在数据输入期间存储给定点的状态(存储操作)。

希望这能有所帮助。

最新更新