我想知道检测何时通过控制台直接调用方法或函数的最佳方法。据我目前了解,不可能在相同的函数调用上直接检测到它,但使用.call()
and .apply()
函数的方法我可以通过传递附加数据this
object.
给出以下代码结构:
(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,您可以使用模块模式 https://stackoverflow.com/a/19801321/227176.
Closure
(function() {
var Game = {};
Game.giveMoney = function(money) {
console.log('Gave money (' + money + ')');
};
})();
包裹你的一切private代码在一个IIFE http://benalman.com/news/2010/11/immediately-invoked-function-expression/ (I立即地Invoked Function E表达)这会将其锁入一个闭包中。
Module
然后仅将自定义函数从闭包中公开出来,以便您可以在控制台上使用它们(当然需要监督)。
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);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)