您可以在运行时更改哪些JavaScript代码?

时间:2017-10-12 19:20:15

标签: javascript html

来自维基百科的引用:

  

JavaScript,允许程序在运行时创建新代码并使用eval函数执行它,但不允许对现有代码进行变异。

是否包含事件处理程序属性中的JS代码以及href前缀为javascript:的?您是否可以在运行时使用JS代码更改这些属性?

我可以在运行时创建新的<script>元素吗?如果我在那里定义一个新版本的函数,会发生什么?浏览器是否会将我的新功能改为旧功能?

如果我无法更改事件处理程序属性,是否可以添加一个新的事件处理程序属性,该属性优先于旧的? W.G.一个onmouseover,其中旧的onclick?并在某种程度上更改了呼叫中的部分?

2 个答案:

答案 0 :(得分: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();
});

然后每次调用匿名函数时都会查找函数定义。

答案 1 :(得分:1)

是的,您可以通过在html元素上设置属性来覆盖事件处理程序和href,包括JS代码。

可以创建一个脚本元素。 document.createElement("script") synchronously