2017-10-12 17 views
1

引用:実行時にどのJavaScriptコードを変更できますか?ウィキペディアから

JavaScriptは、プログラムが実行時に新しいコードを作成し、eval関数を使用してそれを実行することができますが、既存のコードが変異することはできません。

イベントハンドラ属性にはJSコードが含まれ、javascript:というプレフィックスを持つhrefには含まれますか?実行時にこれらの属性をJSコードで変更することはできますか?

実行時に新しい<script>要素を作成できますか?私がそこに関数の新しいバージョンを定義すると、どうなりますか?ブラウザは私の新しい機能を古いものよりも好みますか?

イベントハンドラ属性を変更できない場合は、古いイベントハンドラ属性よりも新しいイベントハンドラ属性を追加できますか? W. onmouseoverここで古いものはonclickですか?そして、コールの部分をいくらか変更しますか?

+0

あなたの開発ツールを開いて、要素を選択してその属性を変更することができます。 – Xufox

+0

これは深い仲間です! –

+0

なぜあなたは最初に尋ねる前に試してみませんでしたか? – trincot

答えて

2

イベントハンドラ属性を変更できます。これはDOMの一部であり、Javascriptではありません。あなたがそうするなら:

document.getElementById("someButton").onclick = someFunction; 

ボタンをクリックすると何が起こるかが変わります。

関数を再定義することもできます。その関数がその名前で呼び出された場合は、以後、新しい定義が実行されます。

しかし、関数参照を渡した場合、その参照を使用しているものには再定義は影響しません。

例として、あなたがしなければ:あなたはmyFunを再定義

<button type="button" onclick="myFun()">Click Me</button> 

場合は、クリックすると新しい定義を使用します。

あなたが代わりに行う場合:機能を再定義する

<button type="button" id="myButton">Click Me</button> 
<script> 
document.getElementById("myButton").addEventListener("click", myFun); 
</script> 

は、そのボタンには影響しません。 myFun変数は、addEventListener()を呼び出した時点で関数オブジェクトを取得するために評価され、関数を再定義するとそのオブジェクトに対して何も行われません。

あなたはJSに変更することができます:

document.etElementById("myButton").addEventListener("click", function() { 
    myFun(); 
}); 

をして、それが関数定義に匿名関数が呼び出されるたびに検索します。

関連する問題