国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

關于AOP在JS中的實現與應用詳解

2024-05-06 15:39:50
字體:
來源:轉載
供稿:網友

1.AOP介紹

簡介

AOP (面向切面編程),縮寫為Aspect Oriented Programming,意為:面向切面編程,通過預編譯方式和運行期動態代理實現程序功能的統一維護的一種技術。AOP是OOP的延續,是軟件開發中的一個熱點,也是JAVA 中Spring框架的一個重要內容,是函數式編程的一種衍生范型。利用AOP可以對業務邏輯的各個部分進行隔離,從而使得業務邏輯各部分之間的耦合度降低,提高程序的可重用性,同時提高了開發的效率。

主要功能

日志記錄 性能統計 安全控制 事務處理 異常處理等等。

主要意圖

將日志記錄,性能統計,安全控制,事務處理,異常處理等代碼從業務邏輯代碼中劃分出來,通過對這些行為的分離,我們希望可以將它們獨立到非指導業務邏輯的方法中,進而改變這些行為的時候不影響業務邏輯的代碼。

  注:請慎重的在JS的中使用AOP!因為部分JS的方法是異步的。 

  必要時使用ES7中的async/await/Promise,以保證代碼的順序執行。

2.AOP在JS中的實現原理

js中aop的實現原理主要依靠Function的兩個函數:apply和call。

apply函數
Function.apply(obj, args);

apply方法能劫持另外一個對象的方法,繼承另外一個對象的屬性

Function.apply(obj, args)方法能接收兩個參數

obj:這個對象將代替Function類里this對象

args:這個是數組,它將作為參數傳給Function(args–>arguments)

利用Function.apply()的參數數組化來提升程序的性能

示例:

function dosomething(a,b,c){ console.log('do something.', a, b, c); // 預期結果: do something. see say run}let something = ['see', 'say', 'run'];dosomething.apply(this, something);

call函數

Function.call(obj, arg, arg, ...);1

示例:

function dosomething(a,b,c){ console.log('do something.', a, b, c); // 預期結果: do something. see say run}dosomething.call(this, 'see', 'say', 'run');

  推薦:使用apply函數。call函數和apply函數的效果是一樣,但是call函數的參數不夠靈活,在寫法上參數無法靈活伸縮;apply函數,只需要把參數放到數組里即可。apply比call函數更適合在項目實際開發中使用,并且apply比call的性能要好。

3.AOP在JS中的實現

從事過Java Web開發的童鞋,一定用過Spring框架。在Spring的框架中有before(前置通知)、after(后置通知)、around(環繞通知)。

今天我們在JS中實現的這三種通知。

1. before(前置通知)

before函數,用來實現函數的前置通知。在目標函數的前面執行一些前置操作。

// AOP 前置通知函數聲明/** * 給方法加入前置切片函數 * 可以在執行方法之前執行一些操作, * 前置切片的返回值為false時,不影響原方法的執行 * @param func {Function} 被前置執行的函數 * @return {Function} 加入前置通知的函數 */Function.prototype._before = function(func){ var __self = this; return function(){  func.apply(__self, arguments);  return __self.apply(__self, arguments); }}// 代碼function a(){ console.log('I/'m a');}a = a._before(function(){ console.log('before');});a();// 結果:// before// I'm a            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 赞皇县| 通海县| 陈巴尔虎旗| 崇礼县| 湖州市| 临潭县| 洮南市| 潢川县| 仁寿县| 郸城县| 青田县| 赤峰市| 达日县| 宁晋县| 石渠县| 茂名市| 新密市| 陵水| 偃师市| 永兴县| 开江县| 清水河县| 南宁市| 宜城市| 吉水县| 连南| 大同市| 镇安县| 景德镇市| 咸阳市| 荥阳市| 怀来县| 崇仁县| 大邑县| 车险| 金堂县| 广安市| 富平县| 视频| 独山县| 普宁市|