本文实例讲述了JavaScript多态与封装。分享给大家供大家参考,具体如下:
编程语言按照数据类型可以分为静态语言类型和动态语言类型两大类。
优点:在编译时就能发现类型不匹配的错误,编译器可以帮助我们提前避免程序在运行期间可能发生的一些错误;在程序中明确规定了数据类型,编译器可以针对这些信息对程序进行优化工作。
缺点:迫使程序员依照契约来编写程序,为每个变量规定数据类型;类型的声明也会增加更多的代码,使得程序员难以专注于业务逻辑。
优点:编写的代码数量少,简洁使得程序员可以更专注于业务逻辑。
缺点:无法保证变量的类型,在程序运行期间可能发生与类型有关的错误。
多态的思想实际上是:将"做什么"与"谁去做以及怎样去做"分离开,也就是将"不变的事物"与"可能改变的事物"分离开,把不变的事物隔离出来,把可变的部分封装起来。要实现这一点,归根结底就是要消除类型之间的耦合关系。
多态的最根本的作用是:通过把程序化的条件分支语句转化为对象的多态性,从而消除这些条件分支语句。
var student = { show: function() { console.log('我是学生'); }};var teacher = { show: function() { console.log('我是老师'); }};var showMe = function(type) { if (type == 'teacher') teacher.show(); else if (type == 'student') teacher.show();};showMe('teacher');showMe('student');
问题:一旦需要增加新的type对应的show()
方法,必须改动showMe()
函数。
解决:把程序中相同的部分抽离出来。
var student = { show: function() { console.log('我是学生'); }};var teacher = { show: function() { console.log('我是老师'); }};var showMe = function(obj) { if (obj.show instanceof Function) obj.show();};showMe('teacher');showMe('student');
若需要增加doctor
类型对象,只需增加:
var doctor = { show: function() { console.log('我是医生'); }};showMe(doctor);
设计模式与多态:
绝大部分设计模式的实现都离不开多态性的思想。
封装的目的是将信息隐藏。一般封装指的是封装数据和封装实现,但广义的封装还包括封装类型和封装变化。
JavaScript没有提供private、public、protected等关键字来实现不同的访问权限,只能依赖变量的作用域来实现封装特性,而且只能模拟出private、public两种封装性。
新闻热点
疑难解答
图片精选