面向对象计算器(简单版)

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <div id="calc">
      <p>0</p>
      <div class="in_group">
        <input type="text" value="0" / >
        <input type="text" value="0" />
      </div>
      <div class="btn_group">
        <button data-method="plus">+</button>
        <button data-method="minus">-</button>
        <button data-method="mult">*</button>
        <button data-method="dicd">/</button>
      </div>
    </div>
    <script>
      const calcEl = document.getElementById('calc')
      const utils = {
        delSpace(value) {
          return value.replace(/\s+/g, '')
        },
        toNum(value) {
          return Number(value) || 0
        }
      }
      // class computed {
      //   plus(a,b) {
      //     return a +b
      //   }

      //   minus(a,b) {
      //     return a - b
      //   }

      //   mult(a,b) {
      //     return a * b
      //   }

      //   dicd(a,b) {
      //     return a / b
      //   }
      // }

      // 装饰器
      const computed = target => {
        target.prototype.plus = function (a, b) {
          return a + b
        }

        target.prototype.minus = function (a, b) {
          return a - b
        }

        target.prototype.mult = function (a, b) {
          return a * b
        }

        target.prototype.dicd = function (a, b) {
          return a / b
        }
      }
      class calcObj {
        constructor(el) {
          // super() // 继承后这个要写
          this.el_name = 'calcEl'
          this.result_p = el.getElementsByTagName('p')[0]
          this.btn_group = el.getElementsByClassName('btn_group')[0]
          this.inputs = el.getElementsByTagName('input')
        }
        init() {
          this.bindEvent()
        }
        bindEvent() {
          this.btn_group.addEventListener('click', this.btnClick.bind(this), false)
        }
        render(method, fval, sval) {
          this.result_p.innerText = this[method](fval, sval)
        }
        btnClick(ev) {
          const e = ev || window.event
          const tar = e.target || e.srcElement
          const tagName = tar.tagName.toLowerCase()
          if (tagName === 'button') {
            const method = tar.dataset.method
            const fval = utils.toNum(utils.delSpace(this.inputs[0].value))
            const sval = utils.toNum(utils.delSpace(this.inputs[1].value))
            console.log(fval, sval)

            // this.result_p.innerText = this[method](fval,sval)
            this.render(method, fval, sval)
            // switch (method) {
            //   case 'plus':
            //     this.result_p.innerText = fval + sval
            //     break
            //   case 'minus':
            //     this.result_p.innerText = fval - sval
            //     break
            //   case 'mult':
            //     this.result_p.innerText = fval * sval
            //     break
            //   case 'dicd':
            //     this.result_p.innerText = fval / sval
            //     break
            //   default:
            //     break
            // }
          }
        }
      }
      computed(calcObj)
      const init = () => {
        new calcObj(calcEl).init()
      }
      init()
    </script>
  </body>
</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值