js设计模式--鸭子类型
2016-03-09 16:49
423 查看
1.简介
JavaScript没有提供传统面向对象语言的类式继承
通过原型委托的形式实现对象与对象之间的继承
没有对抽象类和接口的支持
编程语言按数据类型可分为静态类型语言和动态类型语言
变量的类型要到程序运行的时候, 待变量被赋予值之后,才会具有某种类型。
代码数量更少, 理简洁,专注业务逻辑
缺点:无法保证数据的类型
在JavaScript中,我们对一个变量赋值时,不需要考虑它的类型。动态类型语言对yojgod型的宽容为JavaScript带来了很大的灵活性。
2.duck typing
鸭子类型(duck typing)如果它走起路来像鸭子,叫起来也是鸭子,那么它就是鸭子。
只关注对象的行为,不关注对象本身面向接口编型 ,而不是面向实现编程,是设计模式中最重要的思想。代码演示:
3.复数形态
同一操作作用于不同的对象上面,可以产生不同的解释和不同的执行结果。
给不同的对象发送同样的消息的时候, 这些对象会根据这个消息分别给出不同的反映。(闺蜜短信群发)
JavaScript没有提供传统面向对象语言的类式继承
通过原型委托的形式实现对象与对象之间的继承
没有对抽象类和接口的支持
编程语言按数据类型可分为静态类型语言和动态类型语言
变量的类型要到程序运行的时候, 待变量被赋予值之后,才会具有某种类型。
代码数量更少, 理简洁,专注业务逻辑
缺点:无法保证数据的类型
在JavaScript中,我们对一个变量赋值时,不需要考虑它的类型。动态类型语言对yojgod型的宽容为JavaScript带来了很大的灵活性。
2.duck typing
鸭子类型(duck typing)如果它走起路来像鸭子,叫起来也是鸭子,那么它就是鸭子。
只关注对象的行为,不关注对象本身面向接口编型 ,而不是面向实现编程,是设计模式中最重要的思想。代码演示:
var duck = { duckSinging:function(){ console.log('呱呱呱'); } } alert('duck'); var chicken = { duckSinging:function(){ console.log('呱呱呱'); } } alert('chicken'); var chior = []; var joinChior = function(animal){ if (animal && typeof animal.duckSinging === 'function') { //typeof就是判断参数是什么类型的实例 chior.push(animal); console.log('恭喜你加入合唱团'); console.log('当前已募集'+chior.length+'只鸭子'); } } joinChior(duck); joinChior(duck); joinChior(chicken);
3.复数形态
同一操作作用于不同的对象上面,可以产生不同的解释和不同的执行结果。
给不同的对象发送同样的消息的时候, 这些对象会根据这个消息分别给出不同的反映。(闺蜜短信群发)
相关文章推荐
- [RxJS] Updating Data with Scan
- js获取url传递参数
- JavaScript学习 - 字符串
- js动态创建及移除div的方法
- ejs 模板中输出的两种方式
- 学习Javascript闭包
- javaScript中的this关键字
- [RxJS] Stopping a Stream with TakeUntil
- js exploit
- maven 构建web项目index.jsp报错
- json常用jar包
- JS获取回车事件和文本焦点处理不同按钮提交信息
- JavaScript学习笔记
- 总结的JS数据类型判定(非常全面)
- javascript中callee与caller的用法和应用场景
- JS第11天
- JS中关于 一个关于计时器功能效果的实现
- js的二级联动
- net.sf.json.JSONException: There is a cycle in the hierarchy!
- 如何通过js获得overflow属性为auto的元素的实际宽度