分享一个我见过的最佩服的JS功能

游戏人间 2016-04-23 04:58:17
功能为:一个JS函数功能我们不能修改,但为我们想在原有的函数被调用时,能取得该函数的参数,执行我们需要的新功能(原有功能不被破坏)。
简单描述: 截获某函数(函数调用时机我们不能撑控),取得该函数的参数执行新追加的功能。

希望一些JS高手解释一下。或者看一下还有没有其它的实现方式。 谢谢大家了


<!DOCTYPE html>

<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<script>

//外部系统test函数参数
var argObj = { "name": "BruLee", "sex": "男" };

//假设是外部系统JS 函数功能我们不能修改
function test(arg) {
alert(arg.name);//原有功能
}

//新系统需要在外部系统JS test函数 执行时获取相关参数,执行新的功能(原功能不能被破坏)
if (typeof (test) == "function") {
test = (function (arg) {
var original = test;
return function (arg) {
original(arg);
alert(arg.sex);//新功能
};

})();
}
test(argObj);//test 函数被调用,调用时机我们不能撑控
</script>

</body>
</html>




...全文
136 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
游戏人间 2016-04-23
  • 打赏
  • 举报
回复
对 应该是函数重载。 @jslang 那个是对的。 楼上写的没带参数。不知道是否正确。 @perhapschen 复制运行没结果呀
cocotsau 2016-04-23
  • 打赏
  • 举报
回复
应该就是模拟函数重载吧,不适用于onload事件函数
<script type='text/javascript'>
function overLoad(origin,extend){
	var temp = origin;
	if(typeof origin == 'function'){		
		origin = (function(){//楼上这边写错了
			temp();
			extend();
		})();	
	}else extend();
}

origin=function(){
	alert(1);
}

var extend=function(){
	alert(2);
}
overLoad(origin,extend);
</script>
cocotsau 2016-04-23
  • 打赏
  • 举报
回复
应该就是模拟函数重载吧,不适用于onload事件函数
<script type='text/javascript'>
function overLoad(origin,extend){
	var temp = origin;
	if(typeof origin == 'function'){		
		origin = function(){
			temp();
			extend();
		};	
	}else extend();
}

origin=function(){
	alert(1);
}

var extend=function(){
	alert(2);
}
overLoad(origin,extend);
</script>
天际的海浪 2016-04-23
  • 打赏
  • 举报
回复

//去除闭包的应用就好理解了。
//其实就是把原函数的引用备份一下,重新用原来的函数名创建个新函数,在新函数内调用备份的函数。 

        //外部系统test函数参数
        var argObj = { "name": "BruLee", "sex": "男" };

        //假设是外部系统JS 函数功能我们不能修改
        function test(arg) {
            alert(arg.name);//原有功能
        }

        var original = test;
        test = function (arg) {
            original(arg);
            alert(arg.sex);//新功能
        };

        test(argObj);//test 函数被调用,调用时机我们不能撑控
cheery_an 2016-04-23
  • 打赏
  • 举报
回复
就这样挺好的啊,就相当于重载吧。。。

87,922

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧