2016-11-25 16 views
0

関数を実行する前にJavaScriptを実行するにはどうすればよいですか?関数の前に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() 
+0

あなたは[約束](https://www.toptal.com/javascript/javascript-promises)を使用しようとしなければなりません。これは非同期アクションの順序を保証することができます – MikeVelazco

+1

あなたのコードがあなたが意図していたことを本当に行ったならば、 'console.log'がそれを引き起こし、無限の再帰を引き起こすので無限ループになります。あなたがしようとしていることは(正しく)不可能です。 – lonesomeday

+0

@lonesomeday if(Function.prototype.caller!= 'console')を追加することはできません –

答えて

1

JavaScriptにはこのようなAPIはありません。最も近いのは"Meta Programming"の機能を提供するECMAScript 2015のProxyオブジェクトです。 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(); 
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 
    } 

} 

これはうまくいかないが動作する。

関連する問題