我手边有一个看似很大的问题。我有一个Javascript文件,我们称之为helloworld.js
。我根本无法编辑该文件。但是,在里面,有一个名为function buildDropdown(){}
的函数。
我需要能够在不编辑文件的情况下对该功能进行更改。我可以在helloworld.js文件加载之前或之前添加另一个.js文件。我猜测必须有一种方法来编写补丁.js文件来覆盖function buildDropdown(){}
。在js中是否有一种简单的方法可以告诉它忽略之前的function buildDropdown(){}
并使用覆盖它的function buildDropdown(){}
?
答案 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函数都只是一个对象。这是一个变量声明。因此,它需要在运行时重新定义。就此而言,你可以动态地这样做......自修改代码是完全可能的,尽管这并不意味着它通常是个好主意。
与任何其他变量声明一样,函数具有范围 - 一旦您开始将它们视为变量,它就非常有意义。根据黑盒文件定义所需功能的位置,您可能需要在某个对象的结构中深入几层以重新定义它。但它可以做到。