CoffeeScriptアプリケーションのデバッグを容易にするために、メソッドラッパーを使用してクラス内のメソッドにlogWrapClass(Klass)
を自動的に追加する関数が必要ですが、それは実行可能ですか?console.log(method.name, method.arguments)
これでは不十分なようです
consoleLogWrapClass = (Klass) ->
klassName = Klass.toString()
klassName = klassName.substr 'function '.length
klassName = klassName.substr 0, klassName.indexOf('(')
K = Klass.prototype
for prop of K #in Object.getOwnPropertyNames(K)
obj = K[prop]
if typeof(obj) is 'function'
decoratedName = "#{klassName}::#{prop}"
K[prop] = () ->
console.debug 'trace: '+decoratedName, arguments
return obj.apply this, arguments
私がする時
class Someclass
...
consoleLogWrapClass Someclass
ラッパーが初期クラスのすべての関数を統合したように見えます。たとえば、すべてのobjとdecoratedNameが何らかの理由で同じ要素を指している場合などです。
編集:わかりました、呼び出しを2つの関数に分割すると、さらに奇妙になります
consoleLogWrapFunction = (fn, decoratedName) ->
() ->
console.debug 'trace: '+decoratedName, arguments
return fn.apply this, arguments
consoleLogWrapClass = (Klass) ->
klassName = Klass.toString()
klassName = klassName.substr 'function '.length
klassName = klassName.substr 0, klassName.indexOf('(')
K = Klass.prototype
for prop of K #in Object.getOwnPropertyNames(K)
obj = K[prop]
if typeof(obj) is 'function'
K[prop] = consoleLogWrapFunction obj, "#{klassName}::#{prop}"
それは機能します、誰かが理由を説明できますか?