最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript之AOP編程實例

 更新時間:2015年07月17日 14:33:25   作者:紅薯  
這篇文章主要介紹了JavaScript的AOP編程,以實例形式分析了javascript面向切面編程的實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下

本文實例講述了JavaScript之AOP編程。分享給大家供大家參考。具體如下:

/*
// aop({options});
// By: adamchow2326@yahoo.com.au
// Version: 1.0
// Simple aspect oriented programming module
// support Aspect before, after and around
// usage:
    aop({
      context: myObject,   // scope context of the target function.
      target: "test",     // target function name
      before: function() {  // before function will be run before the target function
        console.log("aop before");
      },
      after: function() {   // after function will be run after the target function
        console.log("aop after");
      },
      around: function() {  // around function will be run before and after the target function
        console.log("aop around");
      }
    });
*/
var aop = (function() {
  var options = {},
    context = window,
    oFn,
    oFnArg,
    targetFn,
    targetFnSelector,
    beforeFn,
    afterFn,
    aroundFn,
    cloneFn = function(Fn) {
      if (typeof Fn === "function") {
        return eval('[' +Fn.toString()+ ']')[0];
      }
      return null;
    },
    checkContext = function() {
      if (options.context) {
        context = options.context;
      }
      if (typeof context[(options.target).name] === "function") {
        targetFnSelector = (options.target).name;
        targetFn = context[targetFnSelector];
      }
      else if (typeof context[options.target] === "function") {
        targetFnSelector = options.target;
        targetFn = context[targetFnSelector];
      }
      if (targetFn) {
        oFn = cloneFn(targetFn);
        oFnArg = new Array(targetFn.length);
        return true;
      }
      else {
        return false;
      }
    },
    run = function() {
      context[targetFnSelector] = function(oFnArg) {
        if (aroundFn){
          aroundFn.apply(this, arguments);
        }
        if (beforeFn){
          beforeFn.apply(this, arguments); // 'this' is context
        }
        oFn.apply(this, arguments);
        if (afterFn){
          afterFn.apply(this, arguments); // 'this' is context
        }
        if (aroundFn){
          aroundFn.apply(this, arguments);
        }
      };
    };
  return function(opt){
    if (opt && typeof opt === "object" && !opt.length) {
      options = opt;
      if (options.target && checkContext()) {
        if (options.before && typeof options.before === "function") {
          beforeFn = options.before;
        }
        if (options.after && typeof options.after === "function") {
          afterFn = options.after;
        }
        if (options.around && typeof options.after === "function") {
          aroundFn = options.around;
        }
        run();
      }
    }
  };
})();
// test examples
// ----------------- aop modify global function ---------------//
function test(name, age) {
  console.log("test fn. name = " + name + " age: " + age);
}
aop({
  target: "test",
  before: function() {
    console.log("aop before");
  },
  after: function() {
    console.log("aop after");
  },
  around: function() {
    console.log("aop around");
  }
});
// run
test("adam", 6);
// ----------------- aop test modify method in an object ---------------//
var myobj = {
  myName: "testName",
  sayName: function() {
    console.log(this.myName);
  },
  childObj: {
    age: 6,
    say: function() {
      console.log(this.age);
    }
  }
};
aop({
  context: myobj,
  target: "sayName",
  before: function() {
    console.log("aop before say name = " + this.myName);
  },
  after: function() {
    console.log("aop after say name = " + this.myName);
  },
  around: function() {
    console.log("aop around say name = " + this.myName);
  }
});
// run
myobj.sayName();
aop({
  context: myobj.childObj,
  target: "say",
  before: function() {
    console.log("aop before say name = " + this.age);
  },
  after: function() {
    console.log("aop after say name = " + this.age);
  },
  around: function() {
    console.log("aop around say name = " + this.age);
  }
});
myobj.childObj.say();

希望本文所述對大家的javascript程序設(shè)計有所幫助。

相關(guān)文章

  • uniapp的webview實現(xiàn)左滑返回上一個頁面操作方法

    uniapp的webview實現(xiàn)左滑返回上一個頁面操作方法

    uniapp默認(rèn)左滑是關(guān)閉整個webview,而不是關(guān)閉當(dāng)前頁,本文給大家介紹uniapp的webview實現(xiàn)左滑返回上一個頁面操作方法,感興趣的朋友一起看看吧
    2023-12-12
  • 一文了解TypeScript數(shù)據(jù)類型

    一文了解TypeScript數(shù)據(jù)類型

    本文主要介紹了TypeScript數(shù)據(jù)類型,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-07-07
  • JavaScript URL參數(shù)讀取改進版

    JavaScript URL參數(shù)讀取改進版

    此前發(fā)表的那一版確實能不用循環(huán),但是總用正則表達式的替換,不一定比用循環(huán)提高性能,而且把程序搞得有些太復(fù)雜了。從《JavaScript權(quán)威指南》上學(xué)到的范例如下
    2009-01-01
  • JavaScript函數(shù)內(nèi)部屬性和函數(shù)方法實例詳解

    JavaScript函數(shù)內(nèi)部屬性和函數(shù)方法實例詳解

    函數(shù)是由事件驅(qū)動的或者當(dāng)它被調(diào)用時執(zhí)行的可重復(fù)使用的代碼塊。通過本文給大家介紹JavaScript函數(shù)內(nèi)部屬性和函數(shù)方法,感興趣的朋友一起學(xué)習(xí)吧
    2016-03-03
  • javascript拖拽應(yīng)用實例(二)

    javascript拖拽應(yīng)用實例(二)

    這篇文章主要為大家詳細(xì)介紹了javascript拖拽應(yīng)用實例,拖拽條拖到底,驗證碼顯示出來,感興趣的小伙伴們可以參考一下
    2016-03-03
  • 防止網(wǎng)站內(nèi)容被小偷采集的js代碼

    防止網(wǎng)站內(nèi)容被小偷采集的js代碼

    防止網(wǎng)站內(nèi)容被小偷采集的js代碼...
    2006-09-09
  • 微信小程序下拉框功能的實例代碼

    微信小程序下拉框功能的實例代碼

    這篇文章主要介紹了微信小程序下拉框功能的實例代碼,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-11-11
  • 淺析XMLHttpRequest的緩存問題

    淺析XMLHttpRequest的緩存問題

    這篇文章主要是對XMLHttpRequest的緩存問題進行了詳細(xì)的介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2013-12-12
  • JS中用EL表達式獲取上下文參數(shù)值的方法

    JS中用EL表達式獲取上下文參數(shù)值的方法

    下面小編就為大家分享一篇JS中用EL表達式獲取上下文參數(shù)值的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • 讓IDE識別webpack的別名alias的實現(xiàn)方法

    讓IDE識別webpack的別名alias的實現(xiàn)方法

    這篇文章主要介紹了讓IDE識別webpack的別名alias的實現(xiàn)方法,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05

最新評論

剑川县| 青浦区| 芮城县| 惠州市| 商丘市| 三明市| 潼南县| 温泉县| 开鲁县| 昌平区| 彭泽县| 来凤县| 连平县| 巴楚县| 五峰| 讷河市| 湖北省| 岚皋县| 从化市| 富民县| 大姚县| 南乐县| 临颍县| 定兴县| 凤山市| 武穴市| 吉木萨尔县| 江安县| 海宁市| 卓资县| 宁蒗| 司法| 曲阜市| 金华市| 新化县| 巢湖市| 财经| 连山| 万载县| 耿马| 沛县|