私は関数宣言を持っています。Javascriptでグローバル関数宣言をオーバーライドします。
function a(){alert("Hello");}
と私は何の効果もありません関数宣言の上、すなわち、それはエラーをスローしてはならないとa();
アラートウィンドウを開くべきではありませんように前に、上記のスクリプトをを実行するスクリプトを持っているしたいと思います。
それは
var a = function(){ alert("Hello");};
のような変数割り当てた場合、その効果はありませんした後に起こること書き込み可能と割り当てないように、私は
Object.defineProperty(window, 'a', {value: function(){}});
を行うことができます。
しかし、同じことは関数宣言では不可能と思われます。どんなに私が設定可能/書き込み可能な設定方法、新しい関数宣言が適用されるか、エラーをスローし、そのよう
Uncaught SyntaxError: Identifier 'a' has already been declared (Chrome)
TypeError: cannot declare global binding `a': property must be configurable or both writable and enumerable (Firefox)
として それはdefineProperty
ハンドラを持っているのでES6プロキシは、有望に見えたが、「プロキシ」には不可能であると思われますwindow
オブジェクトです。
今、私は、関数宣言がブラウザまたはecmascript仕様でどのように実装されているかによって、これを実現することができないと感じています。これを達成する方法はありますか?
また、関数a
が宣言されたときに通知を受け取る方法がある場合は、window.a = function(){}
を実行できます。そんなやり方はありますか?