メソッドまたは関数がコンソールから直接呼び出されたことを検出する最良の方法を知りたいです。私が現在理解している限り、同一の関数呼び出しでそれを直接検出することはできませんが、関数の.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);
実際のコードでは、コンソールからの直接呼び出しと自分のコードを区別する必要がありますが、同じコードをコンソールから実行して目的の効果を達成することもできるため、これは明らかに確実ではありません。
両方の場所から関数を呼び出して、呼び出しの場所を区別できるようにする方法が必要です。それを行う方法がない場合、とにかく実行を試みて防止する最善の方法は何ですか? メソッドをまったく公開せず、すべてを単一の閉じられた無名関数内に保持するのが最善ですか?