第一章 面对对象的javascript
1.1 动态类型语言和鸭子类型
1.编程语言按照数据类型分为:静态类型语言和动态类型语言。
2.静态类型语言:在编译时已确定变量的类型。
优点:(1)在编译期间就能发现类型不匹配的错误,编辑器可以帮助我们提前避免程序在运行期间有可能发生的一些错误。
(2)如果在程序中明确的规定了数据类型,编译器还可以针对这些信息对程序进行一些优化工作,提高执行效率。
缺点:(1)迫使程序猿按照强契约来编写程序。
(2)类型的声明会增加代码量。编程细节会分散程序猿的精力,不能专心于业务代码的编写。
3.动态类型语言:当程序运行时,待某个变量被赋值后,才能确定变量的数据类型。
优点:编写代码数量少,更加简洁,让程序猿专注于业务逻辑,而不是语法细节。
确定:无法保证变量的类型,从而在程序运行期间可能会发生数据类型相关的错误。
4.鸭子类型:如果它走起来像鸭子,叫起来像鸭子,那么它就是鸭子。
1.2 多态
1.多态的实际含义:同一操作作用于不同的对象上面,可以产生不同的解释和不同的执行结果。
通俗一些说:对不同的对象执行相同方法名的方法,可以产生不同的执行结果。
多态的本质思想:“做什么”和“谁去做以及怎样去做”分离开来,也就是将“不变的事物”与“可能改变的事物”分离开来。
对比的例子:
无隔离,无封装的代码
var makeSound = function(animal){ if(animal instanceof Duck){ console.log("嘎嘎嘎"); }else if(animal instanceof Chicken){ console.log("咯咯咯"); } } function Duck(){}; function Chicken(){}; makeSound(new Duck());//嘎嘎嘎 makeSound(new Chicken());//咯咯咯
隔离不变,封装变化的代码
var makeSound = function(animal){ animal.sound(); } function Duck(){}; Duck.prototype.sound = function(){ console.log("嘎嘎嘎"); } function Chicken(){}; Chicken.prototype.sound = function(){ console.log("咯咯咯"); } makeSound(new Duck);//嘎嘎嘎 makeSound(new Chicken);//咯咯咯
未完待续。。。