面向对象-代码优化-变量以及空间(提升复用性)
对象
对象.方法
对象.属性
全局作用域被污染
如何避免命名冲突: 对象命名空间、匿名函数、协同命名
提升代码复用性
考虑函数封装以及参数的控制
工厂模式
考虑作用域 + 复用性 ——> 工厂模式
工厂模式:原料入口(参数) —— 加工 —— 返回成品(return);
构造模式
工厂模式的问题: 由于没有new,从语义性的角度不够好,因此引出构造模式,我们学过的构造函数: new Date();
工厂模式 ——> 构造模式
1 函数名的修改
2 调用函数方式的变化
3 函数中, 使用this替换普通变量
4 去掉return
原型模式
工厂模式和构造模式的共同问题: 当创建多个实例化对象时,每个对象的方法都会创建一个空间(而不能使用同一个空间),相对来说性能较低,产生了资源浪费。
工厂/构造 ——> 原型模式
prototype
每个函数都有自己的原型属性
优点: 解决空间问题。对于引用类型变量(数组、对象)以及函数,所有的实例化对象共用一个空间。
缺点:当对一个实例化对象中的“数组/对象”进行push等方法操作时(直接赋值没有问题),所有的实例化对象会受到影响。
混合模式
希望能够很好的解决“函数”的空间占用问题(原型模式);同时希望每个属性保持独立空间、能够有复用性、视觉效果【语义性】还要好~~(╯﹏╰)b(构造模式)。
混合模式 = 原型模式 + 构造模式;
用原型模式的方式处理方法,用构造模式的方式处理属性。
如何将 原有的工厂模式修改为混合模式
初始条件: 当前的代码已经封装完毕
1 分离所有的函数(即不要出现函数的嵌套)
2 创建构造函数
2.1 修改函数名称
2.2 去掉所谓的返回值return
2.3 采用不同的调用方法
2.4 对于多有的函数内部变量,均使用this去替换(var中干这个字符会“销声匿迹”)
3 处理函数 - 原型
3.1 将所有的功能挂载在原型上 —— 构造函数名.prototype.函数/方法名 = function(){}
3.2 当出现点击等事件控制功能或计时器控制功能时, 需要防止this指向出问题。因此在适当的时候需要预存this属性: var _this = this;
PLUS:混合模式中的this指向函数实例化的对象
PLUS: 另外,部分函数有参数,注意参数的传递
混合模式的应用场景
1 重复性的功能开发
举例: 碰壁反弹、 拖拽、 部分的游戏开发中(如: 拆炸弹)
2 框架开发
举例: 最典型的: JQuery框架
不要陷入误区
误区1 : 所有的代码都要写成面向对象
误区2 : 面向对象是一个全新的功能