嗯,它看起來像我發現一些作品。作爲paper.js的一部分,存在一種稱爲PaperScript的腳本語言,它解析用JavaScript語法編寫的代碼並添加運算符重載,如解釋here所述。基本上paper.js提供paper.PaperScript.compile(code)
函數採用JavaScript代碼和與呼叫來替換每一個數學運算以
function __$__(left, operator, right) {...}
所以像變種var c = a * b;
的表達變得var c = __$__(a, '*', b);
一旦這個變換製成,它是簡單的修改__$__
功能在爲了計數操作:
window.operatorCounts = {};
window.operatorCounts['+'] = 0;
window.operatorCounts['-'] = 0;
window.operatorCounts['*'] = 0;
window.operatorCounts['/'] = 0;
window.operatorCounts['%'] = 0;
window.operatorCounts['=='] = 0;
window.operatorCounts['!='] = 0;
function __$__(left, operator, right) {
window.operatorCounts[operator]++;
switch (operator) {
case '+': return left + right;
case '-': return left - right;
case '*': return left * right;
case '/': return left/right;
case '%': return left % right;
case '==': return left == right;
case '!=': return left != right;
default:
throw new Error('Implement Operator: ' + operator);
}
};
運營商的這種Instrumented版本確定後,這是一個簡單的事情,運行新的編譯功能。通過將這與Keith對Math.x函數的回答結合起來,我能夠完成我設定的任務。
Chrome可能會在其個人資料結果中顯示調用'Math.x'的次數。 –
Javascript允許你重新定義內置的方法。例如 - >'var oLog = Math.log; Math.log =(x)=> {console.log('log');返回oLog(x); }'會輸出'log'並返回原始日誌。所以如果你沒有太多的功能你想分析,這個簡單的方法可能會做。 – Keith