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

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

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

面向接口编程: 利用鸭子类型的思想,我们不必借助超类型的帮助,就能轻松地在动态类型语言中实现一个原则:“面向接口编程,而不是面向实现编程”。例如,一个对象若有 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(面向切面编程)的主要作用是把一些跟核心业务逻辑模块无关的功能抽离出来,这些跟业务逻辑无关的功能通常包括日志统计、安全控制、异常处理等。把这些功能抽离出来之后,再通过“动态织入”的方式掺入业务逻辑模块中。这样做的好处首先是可以保持业务逻辑模块的纯净和高内聚性,其次是可以很方便地复用日志统计等功能模块。

转载于:https://juejin.im/post/5a310127518825619a02ae45

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值