JavaScript函数重名怎么办?

做jsp开发时,调用了两个js文件,其中有一个函数是重名的,怎么解决这个问题?前提是js文件不能修改两个方法都有用,而且效果不一样,怎么办....都没有参数如1.jsfu... 做jsp开发时,调用了两个js文件,其中有一个函数是重名的,
怎么解决这个问题?前提是js文件不能修改
两个方法都有用,而且效果不一样,怎么办....
都没有参数

1.js
function aa(){...}
2.js
function aa(){...}
展开
 我来答
椴iejdhifghj
推荐于2017-09-20 · TA获得超过4701个赞
知道小有建树答主
回答量:622
采纳率:0%
帮助的人:138万
展开全部
,因为脚本在页面里本身就是顺序执行下来的,包括函数的定义,但然如果只是定义 function foo(){}
这种形式,我们是跟踪不到函数初始化的。可是如果是定义类的方式,我们就可以明显地跟踪到函数的初始化顺序。比如:

function foo() {}
function foo.prototype.fn1() {}
function foo.prototype.fn2() {}

我们就可以明显地看到先执行function foo.prototype.fn1(){}再执行function
foo.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 = window.open;
window.open = function() {}
</script>

这样就可以屏蔽掉不是加在页面第一行上的弹出窗口广告(加在第一行不能拦截,因为window.open还没有被'重载'open就先执行了)。
csharpxml
2009-04-21 · TA获得超过590个赞
知道小有建树答主
回答量:371
采纳率:0%
帮助的人:284万
展开全部
结果:只要函数名称一样,始终会执行最下面的函数。
如果连个效果不一样,唯一的方法就是修改函数名,没有其它方法来解决。
除非:
var obj1={
aa:function(){...}
}
var obj2={
aa:function(){...}
}

obj1.aa();

obj2.aa();
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
maodrc
2009-04-21 · TA获得超过3289个赞
知道小有建树答主
回答量:1090
采纳率:79%
帮助的人:1186万
展开全部
只要参数不同就行.参数一样,,,我估计会出现一些莫名其妙的错误......

[补充回答]
lz的意思两个函数位于两个js文件中并且在jsp中引入.

我估计是哪个文件先引入,最终就是引用这个js中的函数
lz可以做一下测试,这个问题很有意思..

如果没法解决的话,可以考虑不引入2.js 或者1.js
把jsp中还用到里面的其他函数copy
一份到这个jsp中,这样就不会出现同名函数了...

加入jsp中用到2.js中的bb函数,但是2.js中引入就导致和1.js中的aa函数冲突了,就把2.js中bb函数复制一份到这个jsp中,不引入2.js. 绕过这个问题..

maodrc 补充于 23:51
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
everalan
推荐于2017-10-10 · TA获得超过1820个赞
知道大有可为答主
回答量:799
采纳率:0%
帮助的人:1432万
展开全部
你不能修改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
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
82324560
2009-04-21
知道答主
回答量:12
采纳率:0%
帮助的人:0
展开全部
不改要求的话,应该是没有办法的……
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式