首页 新闻 搜索 专区 学院

javascript, function被改写了怎么办?

0
悬赏园豆:50 [已关闭问题] 关闭于 2012-12-25 10:45

<script type='javascript'>

function jsTest() {

alertY();
}
 
//这是系统内定的,函数体不知道
function alert1() {
alert(1);
}
 
 
//这个是系统内定的,我无法改
var alertX = alert1;
 
//这个alertY是我可以加的,也可以加在最后,其实我是想指向alert1的函数体alert(1),在方法被覆盖前copy一份出来
var alertY = alertX;
 
//这一段方法被改写是我目前无法阻止的,如何阻止它?
function alert1() {
alert(2);
}
</script>
 
<input type='button' value='js test' onclick='jsTest();' />
 
 
我想点击按钮时,alertY弹出1。如何在方法被改前把未知的函数体拷一份出来?或者阻止方法被改
uwait的主页 uwait | 初学一级 | 园豆:154
提问于:2012-12-12 17:11
< >
分享
所有回答(3)
0

为何要定义2个alert1呢?

chenping2008 | 园豆:9836 (大侠五级) | 2012-12-12 17:36

第二个是一个插件强加进来的,我也不想啊,我就是想阻止第二个alert1. alert1是为了简单描述,实际情况是DOMParser.parseFromString被改写了

支持(0) 反对(0) uwait | 园豆:154 (初学一级) | 2012-12-12 17:39

@uwait: 插件也是一个JS文件,直接修改

支持(0) 反对(0) chenping2008 | 园豆:9836 (大侠五级) | 2012-12-12 20:01

@chenping2008: 编译在dll文件里了, (TAT)...ILoad,国外的一个图形组件

支持(0) 反对(0) uwait | 园豆:154 (初学一级) | 2012-12-12 21:52
0

js加载的顺序是按照引入页面的先后来执行的,你可以把别人的js先加载,然后让你的函数把他们的函数覆盖掉。

AngelGong | 园豆:254 (菜鸟二级) | 2012-12-13 13:19

系统内定的啊,函数体我也不知道是什么,所以才想找个办法在被覆盖前把函数体找出来存起来。

支持(0) 反对(0) uwait | 园豆:154 (初学一级) | 2012-12-13 13:22

我不知道第一个alert1的函数体是function(){alert(1);}

支持(0) 反对(0) uwait | 园豆:154 (初学一级) | 2012-12-13 13:24

@uwait: 您可以试试用new关键字new一个新的对象出来,不要用赋值操作。根据面向对象的特性,赋值操作得到的两个对象是一样的

支持(0) 反对(0) AngelGong | 园豆:254 (菜鸟二级) | 2012-12-13 16:45
0

你可以学jQuery源码的办法, 先备份再还原。

例如:

var backupAlert = alertY;

// 跑他们的代码

alertY = backupAlert;

 

具体可以参照jQuery源码里面的noConflict方法。

undefined | 园豆:698 (小虾三级) | 2012-12-19 10:14
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册