初识AOP面向切面编程 (前端)

前言

想必你们对面向对象OOP (Object Oriented Programming)应该都不陌生,它是一种编程思想。而AOP(Aspect Oriented Programming)在编程历史上能够说是里程碑式的,显然它并非OOP的替代品,而是对OOP的一种十分有益的补充。javascript

那么AOP究竟是个啥东西呢?

咱们都知道OOP的特色是继承、多态和封装。而封装就是把一个功能的代码封装到一个函数中(或一个类中),之后再想实现这个功能,只须要执行函数方法便可,不须要再重复的编写代码。但这样会有一个问题,假如说我封装了一个选项卡的功能,项目中多处都在使用此功能。忽然有一天接到一个需求说但愿选项卡切换的时候请求某个接口,这样的话,项目中的每一个选项卡都要处理一次这个东西,写一堆代码,是否是就很差了?若是说我只想某几个页面选项卡切换的时候去请求某个接口,那你的业务代码又一堆。因此这个时候就须要切面处理,也就是AOP。java

换句大白话,就是说你在家切西瓜,刚切了一刀,忽然家里来客人了。。。你就想在西瓜上裱个花,因而就作了一个裱花的函数,但西瓜下面的那些地方,该怎么样仍是怎么样。换到代码层面,就是不影响原有的业务逻辑,而又在原有的业务逻辑上作 了一些别的事情。编程

示例

Function.prototype.before = function(callback) {
  let self = this
  return function() { 
    callback()
    self.apply(self, arguments)
  }
}

function fn(...val) {
  console.log('原有功能,' + val)
}

let newFn = fn.before(function() { // 原有功能以前执行
  console.log('在原有功能函数以前执行') 
})

newFn('准备', '执行')  // 为原有功能传参
复制代码
相关文章
相关标签/搜索