检测何时从控制台调用函数的最佳方法
Best way to detect when a function is called from the console
我想知道检测何时通过控制台直接调用方法或函数的最佳方法。据我目前了解,不可能在相同的函数调用中直接检测到它,但是使用函数的.call()
和.apply()
方法,我可以通过this
对象传递其他数据。
给定以下代码结构:
(function(){
var Player = {money: 0};
window.giveMoney = function(amount){
if (this.legit !== true)
throw new Error("Don't try to cheat!");
Player.money += amount;
}
})();
我可以使用
window.giveMoney.call({legit: true}, 300);
在我的实际代码中,将来自控制台的直接调用和我自己的代码分开,但这显然不是万无一失的,因为相同的代码也可以从控制台执行以达到预期的效果。
我想要一种方法,能够从两个地方调用函数,然后区分调用的位置。如果没有办法做到这一点,那么无论如何尝试阻止执行的最佳方法是什么?最好是根本不公开任何方法,并将所有内容保存在单个封闭的匿名函数中吗?
要防止全局访问,请确保您的代码处于闭包状态。如果要公开 API,可以使用模块模式来实现。
关闭
(function() {
var Game = {};
Game.giveMoney = function(money) {
console.log('Gave money (' + money + ')');
};
})();
将所有私有代码包装在IIFE中(我立即调用了Function Expression),这会将其锁定到闭包中。
模块
然后仅将自定义函数从闭包中公开出来,以便您可以在控制台上使用它们(当然有监督)。
window.Game = (function() {
var player = {
money: 500;
};
player.giveMoney = function(money) {
console.log('Gave money (' + money + ')');
player.money += money;
};
player.takeMoney = function(money) {
console.log('Took money (' + money + ')');
player.money -= money;
};
return {
giveMoney: function(money) {
console.error('Don''t Cheat! A fine was charged.');
player.takeMoney(Math.floor(player.money / 0.05));
}
};
})();
window.Game.giveMoney(200);
您可以使用布尔变量通过中央访问点假脱机所有函数调用,该变量可以用作调用是否来自控制台的指示器。
var maths = {
add: function(p1,p2)
{
console.log(p1,p2);
}
}
var invoker = {
invoke: function(fu,isconsole)
{
if(isconsole)
{
console.log("Called from console");
}
//invokes the function with all parameters intact
fu;
}
}
//Call without console
invoker.invoke(maths.add(2,3));
//Call with console
invoker.invoke(maths.add(2,3),true);
希望对您有所帮助!!
您可以使用控制台中的 monitor() 命令来监视何时调用函数。 https://developer.chrome.com/devtools/docs/commandline-api#monitorfunction
只需运行monitor(functionName);
,每当调用该函数时,它都会在控制台中输出一条消息。
相关文章:
- 有条件更新d3.js力图中节点的最佳方法
- 将jQuery.ech()方法转换为本地JavaScript抽象的最佳方法是什么
- 处理浮点错误的最佳方法是什么
- 从数组中删除元素的最佳方法是:javascript/jquery
- 以编程方式填充组合框道场 (1.8) 的最佳方法是什么?
- 列出没有 mysql 的元素的最佳方法是什么
- 在jquery库中重新定义方法的最佳方法
- Javascript,用vars创建对象的最佳方法
- 使用 jQuery 从 HTML 中获取某些值的最佳方法
- 在变量中保存值的最佳方法是在应用程序关闭后使用,然后使用apachecordova在android中重新启动
- 在d3.json中使用d3.csv组合多个csv文件数据输入的最佳方法是什么
- 用jasmine测试JavaScriptUI的最佳方法
- 使用javascript:在没有阻止html标记(<b>、<p>等)的情况下,阻止脚本的最佳方法
- 如果我返回表,检查 Ajax 调用是否为 200 OK的最佳方法是什么
- JavaScript - 创建可链接函数时的最佳方法是什么
- 在上下文菜单项单击上显示侧边栏/弹出窗口的最佳方法是什么
- 在 JavaScript 中获取范围的随机数的最佳方法
- 在对象类上实现 jquery 作用域的最佳方法
- 将同步函数包装到承诺中的最佳方法是什么?
- 使用 MVC 删除 JavaScript 中硬编码字符串 Asp.Net 最佳方法