js新手求助:Uncaught TypeError: Cannot read property '1' of undefined
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>无标题文档</title>
<style>
#div1{width: 200px; height: 200px; background:#000;;}
</style>
<script>
window.onload=function()
{
var oBtn=document.getElementById('btn1');
var oDiv=document.getElementById('div1');
oBtn.onclick=function()
{
//css(oDiv,'background','red');
alert(css(oDiv,'width'));
}
function css()
{
if(arguments.length==2)
{
if(oDiv.currentStyle)
{
alert(arguments[0].currentStyle.arguments[1]);
}
else
{
alert(getComputedStyle(arguments[0],false).arguments[1]);
}
}
else if(arguments.length==3)
{
arguments[0].style[arguments[1]]=arguments[2];
}
}
}
</script>
</head>
<body>
<input id="btn1" type="button" value="样式" />
<div id="div1"></div>
</body>
</html>
做一个类似css方法,胆识width是undefined。。为什么啊。。。
自己又研究了下
else
{
alert(getComputedStyle(arguments[0],false).arguments[1]);
}
改成
else
{
alert(getComputedStyle(arguments[0],false)[arguments[1]]);
}
就可以了,但我不知道原理,有人能告诉我原理么,.和[]什么区别。。。
那个style也是一样问题
oDiv.style.width是错误的
oDiv.style[width]是对的。
老师说.和[]是一样的。。为什么差别那么大,求真相 展开
正确的理解和解释如下:
把getComputedStyle(arguments[0],false)看做一个对象。
getComputedStyle(arguments[0],false).arguments[1]的意思是对象arguments(数组)属性的第二个值。
getComputedStyle(arguments[0],false)[arguments[1]]的意思是取“arguments[1]的值”对应的属性值。
arguments是参数,在你的function中传进去的参数。
第一中情况的arguments是你getComputedStyle(arguments[0],false)的属性,它没有arguments属性或arguments的个数小于2,当然会出错了,而第二种情况是把你传进去的参数作为属性穿进去的所以正确。
如果你不明白,那换另一种说法:假如你有对象obj,那么第一种情况是obj.arguments[1]也就相当于(obj.arguments)[1],第二种情况就是obj.(arguments[1])。
拓展资料:
JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能。
参考资料:百度百科-javascript
getComputedStyle(arguments[0],false).arguments[1]的意思是对象arguments(数组)属性的第二个值
getComputedStyle(arguments[0],false)[arguments[1]]的意思是取“arguments[1]的值”对应的属性值。
arguments[0]就是oDiv,arguments[1]就是width吧
那就是
oDiv.width,报错。。。
oDiv[width],就正常了。。。
我太新手了您照着这个给我说说吧。可能比较好理解。。麻烦了。
那个style也是一样问题
oDiv.style.width是错误的
oDiv.style[width]是对的。
老师说.和[]是一样的。。为什么差别那么大,求真相
你搞错了,arguments是参数,在你的function中传进去的参数。
第一中情况的arguments是你getComputedStyle(arguments[0],false)的属性,它没有arguments属性或arguments的个数小于2,当然会出错了,而第二种情况是把你传进去的参数作为属性穿进去的所以正确。
如果你不明白,那换另一种说法:假如你有对象obj,那么第一种情况是obj.arguments[1]也就相当于
(obj.arguments)[1],第二种情况就是obj.(arguments[1]);这会清楚了吧。
alert(arguments[0].currentStyle.arguments[1]);
我的理解是你传过去的'width'是个字符串
而alert(arguments[0].currentStyle.(这儿必须跟的是currentStyle的方法或者currentStyle的属性),arguments[1]根本就不是属性、方法,
至于arguments[0].currentStyle[arguments[1]]就能运行,你把他当成数组,arguments[1]是数组索引名,就能理解了