JavaScript函数调用拦截

JavaScript中的简单实现。
JavaScript函数调用拦截

函数呼叫拦截允许我们在函数调用之前和之后执行代码。在某个操作之后,使用情况可能是之前的格式化和记录。


JavaScript中的简单实现可以如下所示:

// http://jsbin.com/govubetamoli/5/watch?js,console

var myObj = {
  property: 1,
  sendTo: function (endpoint) {
    console.log('sending ' + this.property + ' to ' + endpoint);
  }
};

function format () {
  console.log('formatting ' + this.property);
}

function log () {
    console.log('logging ' + this.property);
}

before(myObj, 'sendTo', format);
after(myObj, 'sendTo', log);

myObj.sendTo('backend');

function before (object, method, fn) {
  var originalMethod = object[method];
  object[method] = function () {
    fn.apply(object);
    originalMethod.apply(object, arguments);
  };
}

function after (object, method, fn) {
  var originalMethod = object[method];
  object[method] = function () {
    originalMethod.apply(object, arguments);
    fn.call(object);
  };
}

这种技术也称为功能包装,是 由sinon.js使用 to create 间谍存根 and 嘲笑.

摄影者 妮可狼 on uns

想加入我们的工程团队吗?