zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    如何提高英阅读英文技术资料
    如何阅读英语文章
    vijosP1223麦森数
    vijosP1359 Superprime
    vijosP1319 数列
    vijosP1447 开关灯泡
    vijosP1164 曹冲养猪
    vijosP1016 北京2008的挂钟
    洛谷P1457 城堡(The Castle)
    洛谷P1294 高手去散步
  • 原文地址:https://www.cnblogs.com/fjl-vxee/p/9347547.html
Copyright © 2011-2022 走看看