2017-10-12 22 views
1

報價:您可以在運行時更改哪些JavaScript代碼?維基百科

的JavaScript,允許程序在運行時創建新的代碼,並使用eval函數執行它,但不要讓現有的代碼中發生突變。

這是否包括在事件處理程序的JS代碼屬性和href s的的javascript:前綴?你可以用JS代碼在運行時改變這些屬性嗎?

我可以在運行時創建一個新的<script>元素嗎?如果我在那裏定義一個新版本的函數,會發生什麼?瀏覽器會更喜歡我的新功能嗎?

如果我不能更改事件處理程序屬性,我可以添加一個新的事件處理程序屬性,它優先於舊的? W.G. onmouseover舊的是onclick?並在通話中更改部分?

+0

您可以打開開發工具,選擇任何元素並更改其屬性。 – Xufox

+0

這是深的伴侶! –

+0

爲什麼你在問之前沒有先嚐試? – trincot

回答

2

您可以更改事件處理程序屬性。這是DOM的一部分,而不是Javascript。所以如果你這樣做:

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

這將改變發生什麼,當你點擊按鈕。

您也可以重新定義函數,所以如果函數被其名稱調用,那麼新的定義將從此開始執行。

但是,如果您傳遞函數引用,則重定義對使用該引用的任何內容都沒有影響。

舉個例子,如果你這樣做:

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

如果重新定義myFun,點擊後會使用新定義。

如果你不是做:

<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(); 
}); 

,然後它會在每次匿名函數被調用時查找函數定義。