JavaScript设计模式与开发实践第一部分
Posted fjl-vxee
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript设计模式与开发实践第一部分相关的知识,希望对你有一定的参考价值。
今天开始阅读《javascript设计模式与开发实践》,对于设计模式的学习一直渴望已久。
设计模式的定义是:在面向对象软件设计过程中针对特定问题的简洁而优雅的解决方案。
其实平时在工作中不知不觉在使用某些设计模式,只是我们不知道而已。
动态类型语言和静态类型语言
- 静态类型语言在编译时便已确定变量的类型,而动态类型语言的变量类型要到程序运行的时 候,待变量被赋予某个值之后,才会具有某种类型。
- 静态类型语言的优点首先是在编译时就能发现类型不匹配的错误,编辑器可以帮助我们提前 避免程序在运行期间有可能发生的一些错误。并对程序进行一些优化工作,提高程序执行速度。
- 动态类型语言对变量类型的宽容给实际编码带来了很大的灵活性。由于无需进行类型检测,我们可以尝试调用任何对象的任意方法,而无需去考虑它原本是否被设计为拥有该方法。
这里就有一个 鸭子类型 的概念。
“如果它走起 路来像鸭子,叫起来也是鸭子,那么它就是鸭子。”
利用鸭子类型的思想,我们 不必借助超类型的帮助,就能轻松地在动态类型语言中实现一个原则:“面向接口编程,而不是 面向实现编程”。
多态
多态的最根本好处在于,你不必再向对象询问“你是什么类型”而后根据得到的答案调用对象的某个行为——你只管调用该行为就是了,其他的一切多态机制都会为你安排妥当。
JavaScript不会进行类型检查,很容易实现多态,只要你具有这个行为就好。而静态类型语言需要被设计为可以向上转型:当给一个类变量 赋值时,这个变量的类型既可以使用这个类本身,也可以使用这个类的超类。
封装
封装的目的是将信息隐藏,封装应该被视为“任何形式的封装”,也就是说,封装不仅仅是隐藏数据,还包括隐藏实现细节、设计细节以及隐藏对象的类型等。
原型模式
在 JavaScript中,每个对象都是从 Object.prototype 对象克隆而来的,这样的话, 我们只能得到单一的继承关系,即每个对象都继承自 Object.prototype 对象,这样的对象系统显然是非常受限的。
但是我们可以动态地指向其他对象。这样一来,当对象 a 需 要借用对象 b 的能力时,可以有选择性地把对象 a 的构造器的原型指向对象 b,从而达到继承的效果。如下代码就是常用的原型链继承方式:
var obj = { name: ‘sven‘ }; var A = function(){}; A.prototype = obj; var a = new A(); console.log(a.name); // sven
Github: https://github.com/Vxee/articles/issues/11
以上是关于JavaScript设计模式与开发实践第一部分的主要内容,如果未能解决你的问题,请参考以下文章