编程语言安装数据类型大体可以分为两类:一类是静态类型语言,另一类是动态类型语言。
静态类型语言:编译时已经确定变量的类型。
动态类型语言:变量类型要到程序运行的时候,带变量被赋予某个值之后,才会具有某种类型。
鸭子类型:行为一致,只关注对象行为,不关注对象本身。
多态:同一操作作用于不同的对象上面,可以产生不同的解释和不同的执行结果。
多态代码:
对象的对台行:var makeSound=function(animal){ if( animal instanceof Duck){ console.log('嘎嘎嘎'); }else if(animal instanceof Chicken){ console.log('咯咯咯'); } } var Duck=function(){}; var Chicken=function(){}; makeSound( new Duck() ); //嘎嘎嘎 makeSound( new Chicken() ); //咯咯咯
var makeSound=function(animal){ animal.sound(); } var Duck=function(){}; Duck.prototype.sound=function(){ console.log('嘎嘎嘎'); } var Chicken=function(){}; Chicken.prototype.sound=function(){ console.log('咯咯咯'); } makeSound( new Duck() ); makeSound( new Chicken() ); var Dog=function(){}; Dog.prototype.sound=function(){ console.log('汪汪汪'); } makeSound( new Dog() );
多态最根本的作用就是通过过程化的条件分支语句转化为对象的多态性,从而消除这些条件分支语句。
var googleMap={ show: function(){ console.log('开始渲染谷歌地图'); } } var baiduMap={ show: function(){ console.log('开始渲染百度地图'); } } var renderMap = function(type){ if( type === 'google' ){ googleMap.show(); }else if( type === 'baidu' ){ } } renderMap();
var googleMap={ show: function(){ console.log('开始渲染谷歌地图'); } } var baiduMap={ show: function(){ console.log('开始渲染百度地图'); } } var renderMap = function(map){ if(map.show instanceof Function){ map.show(); } } renderMap(baiduMap);
封装:封装的目的是将信息隐藏。封装是封装数据和封装实现。更广义的封装是不仅包含封装数据和封装实现,还包括封装类型和封装变化,
封装数据:对外不提供变量访问权限。
封装的目的是将信息隐藏,封装应该被视为“任何形式的封装”,也就是说,封装不仅仅是隐藏数据,海包括隐藏实现细节、设计细节以及隐藏对象的类型。