JS代码复用模式(继承,混合等)
来源:互联网 发布:优酷 mac 缓存 编辑:程序博客网 时间:2024/05/22 00:46
JS代码复用模式(继承,混合等)
简单继承
Children.prototype = new Parent()
特点:
- 继承父类方法的同时继承了父类的属性
- 大量继承时要反复创建父类的实例(避免修改父对象)
- 无法多重继承
借用构造函数
// 父类的构造函数function Parent(name){ this.name = name}Parent.prototype.say = function(){/* ... */}// 子类的构造函数function Children(name){ Parent.apply(this,argument)}
特点:
- 只能继承属性,无法继承原型方法
- 可以多重继承
借用和设置原型
// 父类的构造函数function Parent(name){ this.name = name}Parent.prototype.say = function(){/* ... */}// 子类的构造函数function Children(name){ Parent.apply(this,argument)}Children.prototype = new Parent()
特点:
- 父构造函数会调用两次,影响效率
- 只可以多重继承属性
共享原型
Children.prototype = Parent.prototype
特点:
- 效率高
- 子对象如果修改原型会影响父对象
- 要遵循可复用成员均转移到原型的原则
临时构造函数
// 闭包避免每次都创建Fvar inherit = (function (){ var F = function(){} return function (C,P){ F.prototype = P.prototype C.prototype = new F() // 超类(可选) C.uber = P.prototype // 重置构造函数指针 C.prototype.constructor = C }}())
特点:
- 无明显缺点
原型继承
var Parent = { name : "爸爸"}// ES5var children = Object.create(parent)
复制属性
function extend(P,C){ var i C = C || {} for(i in P){ if(P.hasOwnProperty(i)){ if(typeof P[i] === "object"){ C[i] = (Object.prototype.toString.call(P[i]) === "[object Array]") ? [] : {} extend(P[i],C[i]) }else{ C[i] = P[i] } } } return C}
特点:
- 可部分继承
- 可多重继承
混合(鸭子类型)
并不是所有时候都需要继承,继承也不是完美的,有时候会创造比他能解决的更多的问题,特别是当层次关系没那么明显的时候,
这时候应该多用结构类型(又叫鸭子类型),用结构类型设计灵活的对象接口的时候,不需要返回类的实例,而是直接返回对象,对象具备预期的方法和属性,比如:// 将传入的对象的属性打包成新对象function mix(){ var child = {} for(var arg = 0, len = argument.length; arg < len; arg++){ for(var prop in argument[arg]){ if(argument[arg].hasOwnProperty(prop)){ child[prop] = argument[arg][prop] } } } return child}
借用
即是call()/apply()绑定
// ES5// 后面为预填充参数// 执行newFun相当于执行obj.someFun.call(myobj, 1, 2, 3)var newFun = obj.someFun.bind(myobj, 1, 2, 3)
转载自:《JavaScript模式》第六章
0 0
- JS代码复用模式(继承,混合等)
- js混合模式继承出现问题的解决
- javascript代码复用模式-----传统继承
- javascript代码复用模式-----现代继承
- 代码复用-5种类式继承模式
- JS 设计模式--继承
- 用JS编写出OOP特性的继承JS代码
- Hybrid APP 混合开发模式的选择之路(六:JSBridge---Native代码与JS代码的通信桥梁)
- Hybrid APP 混合开发模式的选择之路(六:JSBridge---Native代码与JS代码的通信桥梁)
- js面向对象混合模式编程
- 构造函数+原型混合方式实现js的继承
- 混合对象 "类" ---js实现继承的两种方式
- 【js设计模式笔记---继承】
- 【js设计模式笔记---继承】
- JS学习 继承 多态 构造函数等
- 继承-代码的复用
- JavaScript继承基础讲解(原型链、借用构造函数、混合模式、原型式继承、寄生式继承、寄生组合式继承)
- JS 代码模式
- Android问题集(五)——解决提示:The method **() is undefined for the type ***()
- CentOS修改默认运行级别
- myeclipse 上安装 Maven3
- Lintcode乱序字符串(时间过长)
- sql语句多表查询实例
- JS代码复用模式(继承,混合等)
- ubuntu网络设置
- Linux系统环境编程(系统当前时间)
- C# QQ机器人(自动应答) (基于WebQQ)
- 学习方法的思考之:“提高学习成绩的七大环节”
- C#的装箱拆箱
- code工具之git
- Ubuntu磁盘分区以及双系统启动顺序修改
- Android Studio系列教程一--下载与安装