美文网首页
《JS设计模式与开发实践》笔记

《JS设计模式与开发实践》笔记

作者: _敏讷 | 来源:发表于2017-06-26 20:59 被阅读0次

    设计模式的定义是:在面向对象软件设计过程中针对特定问题的简洁而优雅的解决方案。

    分辨模式的关键是意图而不是结构

    面向接口编程:
    利用鸭子类型的思想,我们不必借助超类型的帮助,就能轻松地在动态类型语言中实现一个原则:“面向接口编程,而不是面向实现编程”。例如,一个对象若有 push 和 pop 方法,并且这些方法提供了正确的实现,它就可以被当作栈来使用。一个对象如果有 length 属性,也可以依照下标来存取属性(最好还要拥有 slice 和 splice 等方法),这个对象就可以被当作数组来使用。

    多态的实际含义是:同一操作作用于不同的对象上面,可以产生不同的解释和不同的执行结果。换句话说,给不同的对象发送同一个消息的时候,这些对象会根据这个消息分别给出不同的反馈。

    封装
    数据层面的封装
    除了 ECMAScript 6中提供的 let 之外,一般我们通过函数来创建作用域:

    var myObject = (function(){
    var __name = 'sven'; // 私有(private)变量
        return {
        getName: function(){ // 公开(public)方法
          return __name;
        }
      }
    })();
    console.log( myObject.getName() ); // 输出:sven
    console.log( myObject.__name ) // 输出:undefined
    

    封装的目的是将信息隐藏,封装应该被视为“任何形式的封装”,也就是说,封装不仅仅是
    隐藏数据,还包括隐藏实现细节、设计细节以及隐藏对象的类型等。

    如果需要一个跟某个对象一模一样的对象,就可以使用原型模式
    原型模式的实现关键,是语言本身是否提供了 clone 方法。ECMAScript 5提供了 Object.create方法,可以用来克隆对象。

    Object.create = Object.create || function( obj ){ //create的实现
    var F = function(){};
    F.prototype = obj;
    return new F();
    }
    原型模式的真正目的并非在于需要得到一个一模一样的对象,而是提供了一种便捷的方式去创建某个类型的对象,克隆只是创建这个对象的过程和手段。

    This

    1. 作为对象的方法调用。
      当函数作为对象的方法被调用时, this 指向该对象:
    var obj = {
      a: 1,
      getA: function(){
        alert ( this === obj ); // 输出:true
        alert ( this.a ); // 输出: 1
      }
    };
    
    1. 作为普通函数调用。
      当函数不作为对象的属性被调用时,也就是我们常说的普通函数方式,此时的 this 总是指
      向全局对象。
    2. 构造器调用。
      当用 new 运算符调用函数时,该函数总会返回一个对象,通常情况下,构造器里的 this 就指向返回的这个对象
    3. Function.prototype.call 或 Function.prototype.apply 调用。

    闭包(closure)的主要作用
    1.创建函数作用域(封装变量)
    2.延长变量生存周期(延续局部变量的寿命)

    AOP(面向切面编程)的主要作用是把一些跟核心业务逻辑模块无关的功能抽离出来,这些跟业务逻辑无关的功能通常包括日志统计、安全控制、异常处理等。把这些功能抽离出来之后,再通过“动态织入”的方式掺入业务逻辑模块中。这样做的好处首先是可以保持业务逻辑模块的纯净和高内聚性,其次是可以很方便地复用日志统计等功能模块。

    相关文章

      网友评论

          本文标题:《JS设计模式与开发实践》笔记

          本文链接:https://www.haomeiwen.com/subject/dynjcxtx.html