87,991
社区成员
发帖
与我相关
我的任务
分享<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=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的传参数形式,变为可以直接用一个数组为传_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);};对吗?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那文档
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但用到实际代码确实还是不太理解。望高手指教,我实际经验太少。f.apply(f,as[0].constructor==Array? as[0]:as)这里的apply是起到将数组合并的作用吗?还是其他用途?
这个我也理解不了f.apply(f,
两个f加apply我没见到过,不好理解。
不是和你说过了,你去调用 _alert,等于调用原来的alert了?
如果你就要想 返回 把它连在一起可以成这样
_alert=window.alert;
window.alert=function(){
return [].slice.call(arguments).join(',');
}
document.write( alert("1","2","3")) ;
_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
为什么这么写无效?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函数的?那参数是怎么传递进去的。而且为什么只用火狐有效?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这个函数起什么作用?我就知道console.logas[0].constructor==Array这个的意思是指针为数组?
xx什么意思?
另外这个火狐能用,到IE就无效了。[/quote]
var as=[].slice.call(arguments),f=as.pop();
arguments 转成数组,f取最后一个
console.info 火狐下控制台调试用的,没用(我忘了删除 )
Object.constructor ,取实例他的类
function(){(function(a,b,c,d){return document.write(b);})(1,2,3,4)参数就是前面的正则,改成这样function(a,b,c,d){return document.write(b);}为什么无效?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这个函数起什么作用?我就知道console.logas[0].constructor==Array这个的意思是指针为数组?
xx什么意思?
另外这个火狐能用,到IE就无效了。
_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);});