猿问
下载APP

JavaScript函数重名怎么办?

JavaScript函数重名怎么办?


哔哔one
浏览 161回答 3
3回答

慕村9548890

你不能修改JS文件,但是你可以修改调用JS里的函数的文件吗?如果可以的话,重命名第一个函数的名,把调用它的地方都换了。否则没有办法。我写的简单点<head><script src="1.js"></script>var bb = aa;<script src="2.js"></script>这个时候1.js里的函数aa就可以以bb来调用。实际上是aa和bb都指向同一个函数对象。再有一个简单的例子a = alert;alert = function(){a('m')}这样window的默认方法alert就被改变了alert();却弹出m

慕仙森

因为脚本在页面里本身就是顺序执行下来的,包括函数的定义,但然如果只是定义 function foo(){}这种形式,我们是跟踪不到函数初始化的。可是如果是定义类的方式,我们就可以明显地跟踪到函数的初始化顺序。比如:function foo() {}function foo.prototype.fn1() {}function foo.prototype.fn2() {}我们就可以明显地看到先执行function foo.prototype.fn1(){}再执行functionfoo.prototype.fn2(){}。回到我们刚才说的JavaScript脚本函数重名问题上来,比如我们定义两个函数 funAlert():function funAlert(){alert('A');}function funAlert(){alert('B');}调用 funAlert(),那么将显示一个MegBox,内容为'B'。为什么初始化函数会有这样的效果?这里只用把上面两个函数的定义改一下,就会一目了然了,我们把定义改为:var fnAlert = new Function("alert('A')");var fnAlert = new Function("alert('B')");window.fnAlert();其函数也就是定义在对象上的一个函数指针,我们象这个指针赋什么函数引用,它就执行什么效果,而JavaScript中的脚本函数重名就和普通赋值语句一样,等同于:var i = 0;var i = 1;// 稍微注意以下JavaScript里的var,用var定义变量和我们平时用的高级语言定义变量是不同的,它只起到一个提示的作用,提醒说我在这里定义变量了,而没有什么变量作用域的概念,只要不离开定义它的对象的域(比如页面刷新),出现过的变量会就一直存在。所以var写不写都行。举个例子:if ( true ){t = 100;}alert(t);将显示100,而if ( true ){var t = 100;}alert(t);也是显示100。所以JavaScript的脚本函数名重不重复只是一个运算的问题,和我们高级语言里的语法约束完全不是一回事,当然也更不是overload的范畴。脚本函数名重名有什么用呢?最直观就是可以用来实现伪重载,比如我们不少免费的主页空间常常会给你强加弹出窗口广告,我们就可以在页面第一行写上:<script language="javascript">var _open =&nbsp;window.open;window.open&nbsp;= function() {}</script>这样就可以屏蔽掉不是加在页面第一行上的弹出窗口广告(加在第一行不能拦截,因为window.open还没有被'重载'open就先执行了)。

慕田峪4524236

结果:只要函数名称一样,始终会执行最下面的函数。如果连个效果不一样,唯一的方法就是修改函数名,没有其它方法来解决。除非:var obj1={aa:function(){...}}var obj2={aa:function(){...}}obj1.aa();obj2.aa();
打开App,查看更多内容
随时随地看视频慕课网APP
我要回答