求高手帮忙改正这段代码,让他生效。

三国乐园 2013-08-12 06:29:24
<script type="text/javascript">

alert(1,function(){alert(2);});

var string = "267";
var number = /(\d)\d)\d)/g;
alert(string.match(number),function(a,b,c,d){return document.write(b);});
alert(string.match(number),function(a,$1,$2,$3){return document.write($1);});
</script>


①让alert弹出1的时候运行内部函数弹出2

②让document.write(b)和document.write($1)生效

使用参数abcd和a,$1,$2,$3

谢谢
...全文
374 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
fzfei2 2013-08-16
  • 打赏
  • 举报
回复
引用 17 楼 u011478792 的回复:
[quote=引用 16 楼 fzfei2 的回复:] apply在这里的应该主要是为了,参数列表以数组的形式来传给函数 ,专业的解释你还是去看 mozilla那文档
apply我能理解了
_alert=window.alert;
window.alert=function(){
	var as=[].slice.call(arguments),f=as.pop();
	as.length?f.apply(f,  as[0].constructor==Array? as[0]:as  ):_alert(f);
 }
alert(1,function(){alert(2);}); 
最后就是用apply劫持as.pop()这个方法,让
f=function(){alert(2);};
对吗?[/quote] 这里 apply 只是为了让 f的传参数形式,变为可以直接用一个数组为传
三国乐园 2013-08-16
  • 打赏
  • 举报
回复
引用 16 楼 fzfei2 的回复:
apply在这里的应该主要是为了,参数列表以数组的形式来传给函数 ,专业的解释你还是去看 mozilla那文档
apply我能理解了
_alert=window.alert;
window.alert=function(){
	var as=[].slice.call(arguments),f=as.pop();
	as.length?f.apply(f,  as[0].constructor==Array? as[0]:as  ):_alert(f);
 }
alert(1,function(){alert(2);}); 
最后就是用apply劫持as.pop()这个方法,让
f=function(){alert(2);};
对吗?
fzfei2 2013-08-15
  • 打赏
  • 举报
回复
引用 15 楼 u011478792 的回复:
[quote=引用 14 楼 fzfei2 的回复:] apply用法 你看下 这里
语法 fun.apply(thisArg[, argsArray])参数 thisArg 在fun函数运行时指定的this值,需要注意的是,指定的this值并不一定是该函数执行时真正的this值,如果这个函数处于非严格模式下,则指定为null和undefined的this值会自动指向全局对象(浏览器中就是window对象),同时值为原始值(数字,字符串,布尔值)的this会指向该原始值的自动包装对象。 argsArray 一个数组对象或者类数组对象,其中的数组元素将作为单独的参数传给fun函数。如果该参数的值为null或undefined,则表示不需要传入任何参数。
f.apply(f,as[0].constructor==Array? as[0]:as)
第二个f不是this 第一个f是数组末尾被删除的元素 as[0].constructor==Array? as[0]:as这个是参数列表? 主要是apply加第二个f不能理解。 我理解下apply是将as[0]传递给第二个f 虽然理论上多少理解apply但用到实际代码确实还是不太理解。望高手指教,我实际经验太少。[/quote] 第二个f不是this ,这里用 this,f ,都没影响 as[0].constructor==Array? as[0]:as这个是参数列表?,判断 as[0]是不是数组,是就用as[0],不是用 as apply在这里的应该主要是为了,参数列表以数组的形式来传给函数 ,专业的解释你还是去看 mozilla那文档
三国乐园 2013-08-15
  • 打赏
  • 举报
回复
引用 14 楼 fzfei2 的回复:
apply用法 你看下 这里
语法 fun.apply(thisArg[, argsArray])参数 thisArg 在fun函数运行时指定的this值,需要注意的是,指定的this值并不一定是该函数执行时真正的this值,如果这个函数处于非严格模式下,则指定为null和undefined的this值会自动指向全局对象(浏览器中就是window对象),同时值为原始值(数字,字符串,布尔值)的this会指向该原始值的自动包装对象。 argsArray 一个数组对象或者类数组对象,其中的数组元素将作为单独的参数传给fun函数。如果该参数的值为null或undefined,则表示不需要传入任何参数。
f.apply(f,as[0].constructor==Array? as[0]:as)
第二个f不是this 第一个f是数组末尾被删除的元素 as[0].constructor==Array? as[0]:as这个是参数列表? 主要是apply加第二个f不能理解。 我理解下apply是将as[0]传递给第二个f 虽然理论上多少理解apply但用到实际代码确实还是不太理解。望高手指教,我实际经验太少。
fzfei2 2013-08-15
  • 打赏
  • 举报
回复
apply用法 你看下 这里
三国乐园 2013-08-15
  • 打赏
  • 举报
回复
引用 12 楼 fzfei2 的回复:
不是和你说过了,你去调用 _alert,等于调用原来的alert了? 如果你就要想 返回 把它连在一起可以成这样
麻烦你了,按我的程度理解这段函数有些难度。 能不能再告诉下
f.apply(f,as[0].constructor==Array? as[0]:as)
这里的apply是起到将数组合并的作用吗?还是其他用途? 这个我也理解不了f.apply(f, 两个f加apply我没见到过,不好理解。
fzfei2 2013-08-15
  • 打赏
  • 举报
回复
不是和你说过了,你去调用 _alert,等于调用原来的alert了? 如果你就要想 返回 把它连在一起可以成这样

_alert=window.alert;
window.alert=function(){
	return [].slice.call(arguments).join(',');
}
document.write( alert("1","2","3")) ;
三国乐园 2013-08-14
  • 打赏
  • 举报
回复
引用 10 楼 fzfei2 的回复:
我试了下IE9以下的,要把alert ==> window.alert 就行了 _alert=alert; alert=function(){ 改成 _alert=window.alert; window.alert=function(){ ----------------------------- document.write(_alert("1","2","3")); 你去调用 _alert,等于调用原来的alert了,没调用到新的
_alert=window.alert;
window.alert=function(){
	var as=[].slice.call(arguments),f=as.pop();
	return f;
}
_alert("1","2","3");
让前几个参数,再给最后一个参数执行。 变量f是参数合在一起,返回f应该是1、2、3 为什么这么写无效?
fzfei2 2013-08-14
  • 打赏
  • 举报
回复
我试了下IE9以下的,要把alert ==> window.alert 就行了 _alert=alert; alert=function(){ 改成 _alert=window.alert; window.alert=function(){ ----------------------------- document.write(_alert("1","2","3")); 你去调用 _alert,等于调用原来的alert了,没调用到新的
fzfei2 2013-08-13
  • 打赏
  • 举报
回复
重新定义alert, 让前几个参数 再给最后一个参数执行 应该是兼容所有的浏览器吧
三国乐园 2013-08-13
  • 打赏
  • 举报
回复
引用 6 楼 fzfei2 的回复:
var as=[].slice.call(arguments),f=as.pop(); arguments 转成数组,f取最后一个 console.info 火狐下控制台调试用的,没用(我忘了删除 ) Object.constructor ,取实例他的类
alert=function(){
	var as=[].slice.call(arguments),f=as.pop();
	as.length?f.apply(f,  as[0].constructor==Array? as[0]:as  ):_alert(f);
}
这段函数的作用是干什么的?没看明白,是重新定义alert函数的?那参数是怎么传递进去的。而且为什么只用火狐有效?
fzfei2 2013-08-13
  • 打赏
  • 举报
回复
引用 4 楼 u011478792 的回复:
[quote=引用 2 楼 fzfei2 的回复:] 你这是面试题吧
var as=[].slice.call(arguments),f=as.pop(); 
这句是否是这个意思?
Array.prototype.slice = function(start,end){
     var result = new Array();
     start = start || 0;
     end = end || this.length; //this指向调用的对象,当用了call后,能够改变this的指向,也就是指向传进来的对象,这是关键
     for(var i = start; i < end; i++){
          result.push(this[i]);
     }
     return result;
}
引用
这句怎么理解
console.info((as.length?as[0]:'xx'),f)
as.length?f.apply(f,  as[0].constructor==Array? as[0]:as  ):_alert(f); 
console.info这个函数起什么作用?我就知道console.log
as[0].constructor==Array
这个的意思是指针为数组? xx什么意思? 另外这个火狐能用,到IE就无效了。[/quote] var as=[].slice.call(arguments),f=as.pop(); arguments 转成数组,f取最后一个 console.info 火狐下控制台调试用的,没用(我忘了删除 ) Object.constructor ,取实例他的类
三国乐园 2013-08-13
  • 打赏
  • 举报
回复
引用 1 楼 zzgzzg00 的回复:
不明白你想做什么
别人出的题
function(){(function(a,b,c,d){return document.write(b);})(1,2,3,4)
参数就是前面的正则,改成这样
function(a,b,c,d){return document.write(b);}
为什么无效?
三国乐园 2013-08-13
  • 打赏
  • 举报
回复
引用 2 楼 fzfei2 的回复:
你这是面试题吧
var as=[].slice.call(arguments),f=as.pop(); 
这句是否是这个意思?
Array.prototype.slice = function(start,end){
     var result = new Array();
     start = start || 0;
     end = end || this.length; //this指向调用的对象,当用了call后,能够改变this的指向,也就是指向传进来的对象,这是关键
     for(var i = start; i < end; i++){
          result.push(this[i]);
     }
     return result;
}
引用
这句怎么理解
console.info((as.length?as[0]:'xx'),f)
as.length?f.apply(f,  as[0].constructor==Array? as[0]:as  ):_alert(f); 
console.info这个函数起什么作用?我就知道console.log
as[0].constructor==Array
这个的意思是指针为数组? xx什么意思? 另外这个火狐能用,到IE就无效了。
街头小贩 2013-08-12
  • 打赏
  • 举报
回复
围观面试题
fzfei2 2013-08-12
  • 打赏
  • 举报
回复
你这是面试题吧

_alert=alert;
 alert=function(){
    var as=[].slice.call(arguments),f=as.pop();
    console.info((as.length?as[0]:'xx'),f)
   as.length?f.apply(f,  as[0].constructor==Array? as[0]:as  ):_alert(f);
 }

alert(1,function(){alert(2);});
var string = "267";
var number = /(\d)(\d)(\d)/;
alert(string.match(number),function(a,b,c,d){return document.write(b);});
alert(string.match(number),function(a,$1,$2,$3){return document.write($1);});
似梦飞花 2013-08-12
  • 打赏
  • 举报
回复
<script type="text/javascript"> function alerts(a,fun){ window.alert(a); fun(); } alerts(1,function(){alert(2);}); var string = "267"; var number = /(\d)(\d)(\d)/g; alerts(string.match(number),function(){(function(a,b,c,d){return document.write(b);})(1,2,3,4)}); alerts(string.match(number),function(){(function(a,$1,$2,$3){return document.write($1);})(10,RegExp.$1,RegExp.$2,RegExp.$3)}); </script> 不明白你想做什么

87,991

社区成员

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

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