在JavaScript中动态替换函数内容

时间:2012-11-03 16:35:43

标签: javascript

如何在JavaScript中完全替换函数?

我有这个代码,但它不起作用。但是DOM会更新。怎么了?

<html>
<head>
    <script id="myScript" type="text/javascript">
        function someFunction() {
            alert("Same old.");
        }
    </script>
</head>
<body>

<input type="button" onclick="someFunction();" value="A button." />
<script>
    function replace() {
        var oldFunctionString = someFunction.toString();
        var oldContents = oldFunctionString.substring(oldFunctionString.indexOf("{") + 1, oldFunctionString.lastIndexOf("}") );
        var newCode = "alert(New code!);";        
        var newFunctionString = "function someFunction(){"+newCode+"}";
        var scriptTag = document.getElementById('myScript');

        scriptTag.innerHTML = scriptTag.innerHTML.replace(oldFunctionString,newFunctionString);
    }

    replace();
</script>

</body>
</html>

JSfiddle here

2 个答案:

答案 0 :(得分:5)

设置.innerHTML不会重新执行脚本。如果你真的想这样做,你必须创建一个新的script元素并将其附加到DOM,然后覆盖之前脚本所做的事情(当然不可能在所有情况下)。< / p>

如果您想要替换该功能,请使用

somefunction = function() {
    alert(New code!); // syntax error, btw
};

当然,要替换部分代码(不知道所有代码),你可以试试regex和co。仍然只是将新函数重新分配给变量:

somefunction = eval("("
  + somefunction.toString().replace(/(alert\().*?(\);)/, "$1New code!$2")
  + ")");

答案 1 :(得分:2)

您似乎正在尝试使用字符串,而不是函数本身。只需这样做:

someFunction = function () { /* your function code here */ }