博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript设计模式基础之面向对象的JavaScript(一)
阅读量:5254 次
发布时间:2019-06-14

本文共 1247 字,大约阅读时间需要 4 分钟。

动态语言类型与鸭子类型

此内容取自JavaScript设计模式与开发实践一书

编程语言按照数据类型大体可以分为2类,一类就是静态类型语言,另一类则是动态类型语言

静态类型语言也可以称之为编译语言,而动态类型语言则称可以之为解释型语言

JavaScript则属于动态类型语言他无需定义时候声明类型给实际编码带来了极大的灵活性,且可以尝试调用任何对象的任意方法,

而无需考虑它原本是否被设计为拥有该方法。

这其实也叫做鸭子类型 鸭子类型的定义为:如果它走起来像鸭子,叫起来也像鸭子,那么它就是鸭子

举个小例子:

  在一个动物王国中,国王觉得鸭子的声音是最美妙的,于是他要建立一个有2000个鸭子的合唱团,但是大臣们找遍了王国

却只能找到1999只鸭子始终是缺一只,最后一个大臣发现了一只特别的鸡,它的叫声和鸭子一模一样,于是这只鸡进入了合唱团

这个故事想要表达的意思是,国王要听的是鸭子的声音,但是这个声音的主人是鸭子还是鸡并不重要,哪怕它是条狗

 

下面上代码模拟一下这个故事:

 

let duck = {            duckSinging(){                console.log('嘎嘎嘎');            }        };        let chicken = {            duckSinging(){                console.log('嘎嘎嘎');            }        }        let choir = [] //合唱团        let joinChoir = function(animal){            if(animal && Object.prototype.toString.call(animal.duckSinging) === '[object Function]'){                choir.push(animal);                console.log('欢迎加入合唱团');                console.log(`合唱团成员数量已有${choir.length}`);            }        }        joinChoir(duck);        joinChoir(chicken);

输出:

在动态类型语言的面向对象设计中,鸭子类型概念至关重要,利用鸭子类型的思想,我们不比借用超类型就能轻松实现动态语言

中的一个原则:“面向接口编程” 而不是面向实现编程

列如:一个对象若有push和pop方法并且正确实现,那么它就能当做栈来使用,如果有length属性,也可以依照下标来取值这个对象就能当做数组使用

“面向接口编程”是设计模式中最重要是思想

转载于:https://www.cnblogs.com/y-y-y-y/p/9649560.html

你可能感兴趣的文章
c++||template
查看>>
条件断点 符号断点
查看>>
.net学习之继承、里氏替换原则LSP、虚方法、多态、抽象类、Equals方法、接口、装箱拆箱、字符串------(转)...
查看>>
python的多行注释
查看>>
连接Oracle需要jar包和javadoc文档的下载
查看>>
UVA 10976 - Fractions Again?!
查看>>
Dreamweaver cc新版本css单行显示
查看>>
【android】安卓的权限提示及版本相关
查看>>
Java基础教程——网络基础知识
查看>>
Kruskal基础最小生成树
查看>>
【hdu 1429】胜利大逃亡(续)
查看>>
关于收费软件
查看>>
javascript之Style物
查看>>
图的深度优先遍历
查看>>
C# 之 提高WebService性能大数据量网络传输处理
查看>>
原生HttpClient详细使用示例
查看>>
Factory Design Pattern
查看>>
P1192-台阶问题
查看>>
一、使用pip安装Python包
查看>>
3.PHP 教程_PHP 语法
查看>>