js设计模式--鸭子类型
1.简介
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.复数形态
同一操作作用于不同的对象上面,可以产生不同的解释和不同的执行结果。
给不同的对象发送同样的消息的时候, 这些对象会根据这个消息分别给出不同的反映。(闺蜜短信群发)
js设计模式--鸭子类型的更多相关文章
- 初了解JS设计模式,学习笔记
什么是设计模式. 回答这个问题,往往我们得先知道我们为什么需要设计模式,正是因为有需求才会有设计模式,难道不是吗? 我们为什么需要设计模式. 如果没有按照设计模式去写,你的代码很可能是乱无肆忌写的,也 ...
- js 设计模式-接口
js模拟java接口检测函数:确保子类实现接口中的方法:(出自js设计模式) 上代码: <script type="text/javascript" > <%-- ...
- python 全栈开发,Day21(抽象类,接口类,多态,鸭子类型)
一.昨日复习 派生方法和派生属性 super 只有在子父类拥有同名方法的时候, 想使用子类的对象调用父类的方法时,才使用super super在类内 : super().方法名(arg1,..) 指名 ...
- js设计模式总结1
js设计模式有很多种,知道不代表会用,更不代表理解,为了更好的理解每个设计模式,对每个设计模式进行总结,以后只要看到总结,就能知道该设计模式的作用,以及模式存在的优缺点,使用范围. 本文主要参考张容铭 ...
- python 接口(抽象) 多态,鸭子类型, 多继承原理(mro)
抽象类与接口类 接口类 继承有两种用途: 一:继承基类的方法,并且做出自己的改变或者扩展(代码重用) 二:声明某个子类兼容于某基类,定义一个接口类Interface,接口类中定义了一些接口名(就是函数 ...
- Python装饰器AOP 不定长参数 鸭子类型 重载(三)
1 可变长参数与关键字参数 *args代表任意长度可变参数 **kwargs代表关键字参数 用*args和**kwargs只是为了方便并没有强制使用它们. 缺省参数即是调用该函数时,缺省参数的值若未被 ...
- 什么是鸭子类型(duck typing)
"当看到一仅仅鸟走起来像鸭子.游泳起来像鸭子.叫起来也像鸭子,那么这仅仅鸟就能够被称为鸭子." 我们并不关心对象是什么类型,究竟是不是鸭子,仅仅关心行为. 比方在python中.有 ...
- Python:多态、协议和鸭子类型
多态 问起面向对象的三大特性,几乎每个人都能对答如流:封装.继承.多态.今天我们就要来说一说 Python 中的多态. 所谓多态:就是指一个类实例的相同方法在不同情形有不同表现形式.多态机制使具有不同 ...
- 面向对象—多态、鸭子类型(Day21)
编程原则java具有自己的编程原则和设计模式,不能多继承.python的编程原则:1.开放封闭原则:开放是对扩展是开放的,封闭是对修改是封闭的(已经写完的代码程序是不能修改的).2.依赖倒置原则:高层 ...
随机推荐
- Get familiar with key Frameworks of ios
Frameworks make your life easier as an iOS Developer. They allow you to reuse code written by other ...
- books
<<learning opencv>>, 布拉德斯基 (Bradski.G.) (作者), 克勒 (Kaehler.A.) (作者), 这本书一定要第二版的,因为第二版 ...
- modelsim使用命令
1. 常用仿真命令 vlib work // 建立work仿真库 vmap work wrok // 映射库 vlog -cover bcest *.v // 加覆盖率分析的编 ...
- java模拟DVD管理器
import java.util.*;import java.text.*;class DVDSet{ String[] name = new String[50]; //名字 int[] ...
- 几款开源的图形化Redis客户端管理软件推荐
Redis是一个超精简的基于内存的键值对数据库(key-value),一般对并发有一定要求的应用都用其储存session,乃至整个数据库.不过它公自带一个最小化的命令行式的数据库管理工具,有时侯使用起 ...
- SSL安全解决方案(转)
http://blog.csdn.net/photnman/article/details/388853 背景及部分安全知识在高度保证应用程序安全的过程中我们不免会考虑到如下的安全需求,然后根据这些安 ...
- 8086FLAG寄存器
8086中的FLAG寄存器也就是状态标志位寄存器.它用来存储一些指令的计算结果,比如加法减法中的进位:为CPU运行某些命令提供根据,比如DF它决定是往前走指针还是向后走指针:总之状态寄存器存放的被称为 ...
- 项目FAQ
报错: Conversion from String Literal to Char* is deprecated http://stackoverflow.com/questions/1369030 ...
- WSDL阅读方法
我们以天气预报WebService服务为例,来看看怎么阅读一个wsdl文档. 打开一个wsdl文档后,先看底部. binding在这里: portType在这里: 好了,看了上面的,我们来说说wsdl ...
- mac 神奇时光机
http://bbs.zol.com.cn/nbbbs/d544_8216.html