本博客学习书籍:《JavaScript设计模式与开发实践》
本博客学习章节:第一章
面向对象编程与原型模式
动态类型语言
编程语言按照是否定义数据类型大体可以分为两类,一类是静态类型语言
,另一类是动态类型语言
。JavaScript就是一种动态类型语言,定义到调用都不用管变量的类型。
// 定义a时不需要管它的类型
// 在 F12-Console 台,依次输入下面每行的代码,都是OK的
var a;
a = 1;
a += '-aaa'
a = [1,2,3]
a = new Date()
- 静态类型语言在编译时便已确定变量的类型,否则的话VScode或webstorm这些编译器就会提示错误。比如:java,C语言系列,php。
- 动态类型语言的变量类型要到程序运行的时候,待变量被赋予某个值之后,才会具有某种类型。比如:python,JavaScript。
- 另外,
js + TypeScript
也是要写代码时就要声明数据类型。
鸭子类型
什么是鸭子类型呢?就是“如果它走起路来想鸭子,叫起来也是嘎嘎嘎,那么它就是鸭子”。如下图:
我们这里,关注的是对象的行为,行为一致就可以看做同一类型,所以就可以写出如下代码:
// 如果你会喵喵喵,我就当你是个猫,你就可以排队吃小鱼干了
var hashiqi = {
say:function(){
console.log('喵~喵~');
}
}
var daju = {
say:function(){
console.log('喵~喵~');
}
}
var kaifanla = [];
var joinKaifan = function(animal){
if(animal && typeof animal.say === 'function'){
kaifanla.push(animal);
console.log('猫猫排队了!今日份一袋小鱼干~');
}
}
joinKaifan(hashiqi);
joinKaifan(daju);
多态
多态的含义是:给不同的对象发送同一个消息的时候,这些对象会根据这个消息分别给出不同的反馈。
在 JavaScript 这种将函数作为一等对象的语言中,函数本身也是对象,函数用来封装行为并且能够被