zoukankan      html  css  js  c++  java
  • 【Javascript】js在面向对象中使用闭包构建静态私有成员

    js在面向对象中使用闭包构建静态私有成员

    js的面向对象可谓是一言难尽啊,不过也造就了他的灵活

    var ATM = (function () {
      // 静态私有成员 余额/ATM记录(类似于传统面向对象语言的 private static int xxx = 1000)
      let balance = 1000
      const record = []
    
      // 创建构造方法 (类似于传统面向对象语言的 public class_name(){})
      function _atm(name = '') {
        this.name = name
        // 公有实例方法 (类似于传统面向对象语言的 public void withdraw(){})
        this.withdraw = function (amount) {
          if (balance >= amount) {
            balance -= amount
            _log(this.name, amount)
          } else {
            console.log('余额不足,当前ATM余额 ¥' + balance)
          }
        }
      }
      // 构建原型静态公有方法 查询ATM余额(传统面向对象里没有prototype,任何实例可以访问并修改,但是这个方法不属于实例)
      _atm.prototype = {
        balance(echo = false) {
          if (echo) record.forEach((v) => console.log(v))
          else return balance
        }
      }
    
      // 静态私有方法 用于存储取款记录(类似于传统面向对象语言的 private static void xxx(){})
      function _log(name, amount) {
        record.push(name + '取款 ¥' + amount + ' ATM余额 ¥' + balance)
      }
      return _atm
    })()
    
    // 小明和小红分别进行取款
    let xm = new ATM('小明')
    xm.withdraw(200)
    xm.withdraw(500)
    
    let xh = new ATM('小红')
    xh.withdraw(100)
    
    // 小张来过来查询下ATM取款记录
    let xz = new ATM()
    xz.balance(true)
    
    // 以上打印输出
    // 小明取款 ¥200 ATM余额 ¥800
    // 小明取款 ¥500 ATM余额 ¥300
    // 小红取款 ¥100 ATM余额 ¥200
  • 相关阅读:
    课后作业-阅读任务-阅读提问-3
    《团对-团队编程项目作业名称-开发环境搭建过程》
    《结对贪吃蛇游戏——测试过程》
    《Android手机便签-项目进度》
    结对编程项目作业2-开发环境搭建过程
    结对编程项目作业2-结对编项目设计文档
    《GIT的使用方法》
    课后作业-阅读任务-阅读提问-1
    个人编程项目
    《自我介绍》
  • 原文地址:https://www.cnblogs.com/bc8web/p/7895479.html
Copyright © 2011-2022 走看看