覆盖Javascript函数?

时间:2015-04-20 01:36:12

标签: javascript

我手边有一个看似很大的问题。我有一个Javascript文件,我们称之为helloworld.js。我根本无法编辑该文件。但是,在里面,有一个名为function buildDropdown(){}的函数。

我需要能够在不编辑文件的情况下对该功能进行更改。我可以在helloworld.js文件加载之前或之前添加另一个.js文件。我猜测必须有一种方法来编写补丁.js文件来覆盖function buildDropdown(){}。在js中是否有一种简单的方法可以告诉它忽略之前的function buildDropdown(){}并使用覆盖它的function buildDropdown(){}

3 个答案:

答案 0 :(得分:1)

在原版之后定义你的。假设您不需要保留原件中的任何内容。如果你这样做。 。 。比如,如果你需要将它包装在其他东西中,你可以这样做:

var origBuildDropdown = buildDropdown;
function buildDropdown() {
  // Do pre-function stuff

  // Invoke original function
  origBuildDropdown();

  // Do post-function stuff
}

答案 1 :(得分:1)

您可以再次定义该功能,它将覆盖以前定义的功能:

<script src="helloworld.js">
    function buildDropdown(){
        /* Old Function */
    }
</script>
...
<script src="yourScript.js">
    function buildDropdown(){
        /* New code here */
    }
</script>

答案 2 :(得分:1)

几个答案已经解释了如何做你想做的事情,但似乎值得解释为什么。

你(或你加载的一些随机脚本文件)定义的每个javascript函数都只是一个对象。这是一个变量声明。因此,它需要在运行时重新定义。就此而言,你可以动态地这样做......自修改代码是完全可能的,尽管这并不意味着它通常是个好主意。

与任何其他变量声明一样,函数具有范围 - 一旦您开始将它们视为变量,它就非常有意义。根据黑盒文件定义所需功能的位置,您可能需要在某个对象的结构中深入几层以重新定义它。但它可以做到。