Editor's Notes
- 缺点:产成实例后即生成 div 节点,如果用户用不到(永远不弹出),则白白消耗了宝贵的 dom 操作,下面即照着这个思路进行优化
- 静态语言的思路,增加标志 (this.init) 来控制初始化的次数,只有在第一次显示时才进行创建。(这里也可以判断 this.el 的存在与否,道理相同)
- 缺点: 1. 不够分离与自动化,每次都得在原函数中进行操作,和原有逻辑混在一起。 2. 增加了内存占用,在实例自身中创建函数,取代了原型链查询,但也同时提升了访问速度。 3. 若用户开始就注册 this.show 到 dom 节点事件,则后面重写无效。
- 1. 分离初始化动作 (_prepare) 与实际动作 (_real) ,利用 lazyRun 公共机制串联。 2.lazyRun 在实例生成后立即重写 _prepare 。 调用 _prepare 时,先调用自身,再调用实际操作代码 _real, 最后用 _real 重写自己。 3. 不修改对外接口 show , show 中直接调用 _prepare ,可用它做为事件回调函数。
- 还是弹窗,但是常常伴随着遮罩层( mask ),遮罩层是所有 dialog 实例公用,但是如果一开始就创建遮罩层,就显得有点浪费(实例还没生成呢),所有我们常常这样处理:
- 这样的话当某个实例第一次执行 show 时会运行 _prepare 而初始化 mask ,随之构造器的原型立即被更改,则以后所有的弹窗实例 show 时都会直接运行构造器原型上被覆盖后的 _prepare 即 _real ,达到了 所有实例共享 mask 的目的。