1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
<!DOCTYPE html>
<html>

<head>
<title> 事件</title>
</head>

<body>
<input type='text' id='num1' />
<select id='operate'>
<option value='+'>+</option>
<option value="-">-</option>
<option value="*">*</option>
<option value="/">/</option>
</select>
<input type='text' id='num2' />
<input type='button' value=' = ' onclick="count()" />
<input type='text' id='result' />


<script type="text/javascript">
(function count() {
/*此处写代码*/
/* calculator对象里含有以下属性:
num1:第一个输入框
num2第二个输入框
result:结果输出框
operator:运算符下拉框
btn:=按钮
option:下拉框中的每个运算符

*/
var calculator = {
num1: document.querySelector("#num1"),
num2: document.querySelector("#num2"),
result: document.querySelector("#result"),
operator: document.querySelector("#operate"),
btn: document.querySelector("input[type=button]"),
option: null,
};

// 给每个运算符命名add,subtract,multiply,divide
(function () {
calculator.option = calculator.operator.querySelectorAll("option");
calculator.option[0].setAttribute("title", "add");
calculator.option[1].setAttribute("title", "subtract");
calculator.option[2].setAttribute("title", "multiply");
calculator.option[3].setAttribute("title", "divide");
})();

// 点击=按钮时,调用operate函数,计算出结果并调用outputResult函数输出结果
calculator.btn.onclick = function () {
var index = calculator.operator.selectedIndex;//当前选中select的index
outputResult(operate(calculator.option[index].title, calculator.num1, calculator.num2));
}
// 操作函数自执行,里面的operation是算术运算,可以调用addOperation来增加运算,operate函数执行参数传递和结果运算
var operate = (function () {
var operation = {
add: function (num1, num2) {
return +num1.value + +num2.value;
},
subtract: function (num1, num2) {
return num1.value - num2.value;
},
multiply: function (num1, num2) {
return num1.value * num2.value;
},
divide: function (num1, num2) {
return num1.value / num2.value;
},
addOperation: function (name, fn) {
if (!operation[name]) {
operation[name] = fn;
}
return operation;
}
}

function operate(title) {
if (!operation[title]) throw new Error("不存在名为" + title + "的运算方法")
return operation[title].apply(operation, [].slice.call(arguments, 1, arguments.length));
}

operate.addOperation = operation.addOperation;//把operateion的addOperation方法赋予operate来给外面调用
return operate;
})();

//结果输出
function outputResult(resultNum) {
calculator.result.value = resultNum;
}


})();
</script>
</body>

</html>