【第一章】面向对象的JavaScript

动态类型语言和鸭子类型

编程语言按照数据类型 可以分为 静态类型语言和动态类型语言

        静态类型语言:声明时确定变量类型
            优:
            1. 在编译时就能发现类型不匹配的错误,提前避免程序在运行期间有可能发生的一些错误。[提高可靠性]
            2. 如果在程序中明确地规定了数据类型,编译器还可以针对这些信息对程序进行一些优化工作,提高程序执行速度。
            缺:
            1. 具有强迫性 不够灵活
            2. 类型的声明会增加代码量 分散业务逻辑这个重点
        动态类型语言:赋值时确定变量类型(JavaScript)
            优:
            1. 简化代码量 侧重点更能集中在业务逻辑上面
            2. 代码灵活性增强
            缺:
            1. 无法保证变量的类型 [可靠性低]

动态语言和鸭子类型的关系

鸭子类型概念:如果它走起路来像鸭子,叫起来也是鸭子,那么它就是鸭子(关注的是has a xx 而不是 is a xx)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/**
我的理解:
动态语言无法保证变量的类型
那么只要他所赋值的变量有某种类型的特性 那么它就是某一类型
*/
//书中的例子
var duck = { //鸭子
voice: function(){
console.log('嘎嘎嘎')
}
}
var chicken = { //鸡
voice: function(){
console.log('嘎嘎嘎')
}
}

var Ducks = [] //鸭子类型
var joinDucks = function(animal){
if( animal && typeof animal.voice === 'function' ){
Ducks.push(animal)
console.log('恭喜加入鸭子类型')
}
}

joinDucks(duck) //恭喜加入鸭子类型
joinDucks(chicken) //恭喜加入鸭子类型

多态

对象继承类的属性/方法 但是可以对属性/方法进行针对性的改变
就是构造函数根据传入的变量不同,对同一方法,有不同的返回结果

1
2
3
4
5
6
7
8
9
var Animal = function( sound ){
this.sound = function(){
console.log(sound)
}
}
var duck = new Animal('嘎嘎嘎')
var chicken = new Animal('咯咯咯')
duck.sound() //嘎嘎嘎
chicken.sound() //咯咯咯

封装

封装的目的就是将信息隐藏 不在乎过程 只要能使用

扫一扫,分享到微信

微信分享二维码
  • Copyrights © 2019-2023 John Doe
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信