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设计模式与开发实践第一部分的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript设计模式与开发实践 模板方法模式

《JavaScript设计模式与开发实践》—— 策略模式

PHP核心技术与最佳实践

《 javascript 设计模式与开发实践 》 ---发布-订阅模式 代码小问题

JavaScript设计模式与开发实践 适配器模式

Javascript设计模式与开发实践读书笔记(1-3章)