JavaScript在函数之前运行代码

时间:2016-11-25 19:19:15

标签: javascript function prototype

如何在运行函数之前执行一些javascript?我尝试过这样的事情:

Function.prototype._call= Function.prototype.call;
Function.prototype.call = function(src) {
    console.log('A function was called name = ', src)
    Function.prototype._call(src);
}

但这仅在我使用

时有效
myfunction.call()

我希望代码在我正常调用任何函数时起作用,例如:

myfunction()

2 个答案:

答案 0 :(得分:1)

JavaScript中没有这样的API。最接近的是ECMAScript 2015的Proxy对象,它提供"Meta Programming"个功能。为函数调用调用apply陷阱处理程序:

var proxy = new Proxy(function functionName() { /* ... */ }, {
  apply: function(target, thisArg, argumentsList) {
     console.log('%s was called', target.name);
     // you may want to use the `Function.prototype.apply` 
     // instead of the `()` operator
     target();
  }
});

proxy();

答案 1 :(得分:0)

内置JavaScript没有这样的东西。这只是你必须自己实现的东西:

function MyClass() {
  var self = this;
  this.beforeEach = function() {
    //runs before each method
  }

  this.myFunction = function() {
    self.beforeEach();
    //function code
  }

  this.myOtherFunction = function() {
    self.beforeEach();
    //function code
  }

}

不优雅,但有效。