Js疑问求高手解答
<script>functionbb(){c=[]c.push(arguments)returnc}document.write(bb(1,2,3));</script>...
<script>
function bb(){
c=[]
c.push(arguments)
return c
}
document.write(bb(1,2,3));
</script>
打印出来的为啥不是123啊而是[object Arguments]啊而用
<script>
function bb(){
c=[]
c.push.apply( c,arguments)
return c
}
document.write(bb(1,2,3));
</script>
为啥能打印出123求高手指点
还有为啥必须是c.push.apply( c,arguments)用c.push.apply( this,arguments)就不行 展开
function bb(){
c=[]
c.push(arguments)
return c
}
document.write(bb(1,2,3));
</script>
打印出来的为啥不是123啊而是[object Arguments]啊而用
<script>
function bb(){
c=[]
c.push.apply( c,arguments)
return c
}
document.write(bb(1,2,3));
</script>
为啥能打印出123求高手指点
还有为啥必须是c.push.apply( c,arguments)用c.push.apply( this,arguments)就不行 展开
2个回答
展开全部
因为 arguments 引用的是一个 Arguments 对象,它类似数组,却不是数组,简单来说,它就是带有下标属性和长度属性的对象,伪码如下:
Argument : { 0 : 实参1 , 1 : 实参2 , ... , N : 实参N, length : N , callee : Function }
可以使用下面的方式调用数组的构造函数,将 Arguments 对象转换成数组:
function getArgument(){
if(arguments.length == 1){
return [ arguments[0] ] ;
}
return Array.apply( null , arguments );
}
参考:Arguments 对象 http://www.tootei.net/archives/471#1-3-2
追问
谢谢你的回答啊我还想知道为啥必须是c.push.apply( c,arguments)用c.push.apply( this,arguments)就不行啊this代表什么啊括号里的c又代表什么啊
追答
this 代表了当前上下文对象。
代码运行在全局域中,this 就指向全局对象。
如果在构造函数中,thsi 指向刚刚创建的对象。
关于 this 的知识,有些繁琐,请参考 http://www.tootei.net/archives/471#4 前后的章节。
函数是特殊的对象,它内部实现了 [[Call]] 方法,简单来说:函数就是可以调用和执行的对象。
作为对象,函数也有自己的属性和方法,apply方法 就是其中之一。
apply 方法的用途,是将第一个参数作为函数的上下文也就是 this 指代的对象,第二个参数是一个数组或类数组,作为传递给函数体的实参列表。
之所有两种方式的结果不同,肯定是其内部实现不同。直接调用 push 不对类数组对象进行转换,而 apply 方法则会进行这种转换。
展开全部
看明白了,初始的时候这个div的4个ul是display:block状态 不是display:none;状态,所以开始会全部显示,你改成下面这样就可以了,把后面3个加隐藏<div id="main0" class="main"><ul class="block">.....</ul><ul class="block" style="display:none">.....</ul><ul class="block" style="display:none">.....</ul><ul class="block" style="display:none">.....</ul></div>
追问
什么乱七八糟的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询