javascript - JS中单例的销毁问题
迷茫
迷茫 2017-04-11 11:45:45
[JavaScript讨论组]

目前遵循单一职责的原则, 单例的管理函数和单例的创建函数是分开的, 如下:

function handleSingleton (createFn){
  // createFn是单例的创建函数(例如创建一个p元素等)
  let created = null
  return function (...rest) {
    return created || (created = createFn.apply(this, rest))
  }
}

但这样有个问题: 单例创建后无法有效地销毁. 为了解决这个问题, 增加了一个destroyFn函数用于销毁闭包内的created变量, 并根据传入的type来决定是调用createFn来创建单例, 还是调用destroyFn来销毁单例:

function handleSingleton (createFn, destroyFn){
  let created = null
  // 判断传入的type
  return function (type, ...rest) {
    if (type === 'create') {
      return created || (created = createFn.apply(this, rest))
    } else if (type === 'destroy') {
      destroyFn.call(this, created, ...rest)
      created = null
    } else {
      throw new Error('\'type\' can either be \'create\' or \'destroy!\'')
    }
  }
}

有没有更好的办法呢?

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(1)
迷茫

在handleSingleton的返回函数上添加一个销毁函数,用于销毁自己

function handleSingleton (createFn){
  // createFn是单例的创建函数(例如创建一个p元素等)
  let created = null
  let ret =  function (...rest) {
    return created || (created = createFn.apply(this, rest))
  }
  ret.distroy = function(distroyFn){
    distroyFn && distroyFn()
    created = null
  }
  return ret
}
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号