Thin的DateChooser代码学习(关于js的函数参数为一个完整的函数以及“对象不支持此属性或方法”错误的解决)(原创,转载请声明)
2006-05-30 16:45 BAsil 阅读(1424) 评论(2) 编辑 收藏 举报今天在学习Thin的DateChooser代码时,发现在I(getelement)函数中传递另外一个完整的函数作为I(getelement)函数的参数。我其实在Ajax的一些简单应用里见到过类似的使用方式但没有用过,因此决定写一个小例子学习一下。不想很简单的一个例子,却调试不过,来看一下代码,为了定位错误,我把例子简化了一下。
<body>
<table id="tablepanel" ></table>
<script>
function I(getelement)
{
tablepanel=getelement("tablepanel");
alert(tablepanel.id);
}
I(function getelement(id){return document.all(id)});
</script>
</body>
运行结果 :出现了运行时间错误。是否进行调试?
错误:对象不支持此属性或方法
这个错误花了我不少时间才解决,改正后的代码如下
<body>
<table id="tablepanel" ></table>
<script>
function I(getelement)
{
var tablepanel=getelement("tablepanel");
alert(tablepanel.id);
}
I(function getelement(id){return document.all(id)});
</script>
</body>
因为tablepanel没有定义,才会出现刚才的错误,但比较奇怪的是js是不需要变量声明的,这里的错误我感觉是IE的bug,我手头没有其他的浏览器,不知道其他的会怎么样。总之,以后写类似的函数一定得注意了。
上面的代码,其实就是传递了一个查找id的函数。我们可以扩展一下,如果判断浏览器不支持document.all,我们可以传一个用到document.getElementById的函数实参,是不是很方便?
BTW, 还有几个小细节也是我在学习的过程中发现的,这里mark一下
1. DataChooser里有类似的代码
function test()
{
alert("test");
function tablepanel.onselectstart()
{
alert("onselectstart");
return win.event.returnValue=false;
}
mprev.ondblclick=function mprev.onclick(){ alert("mprev"); }
}
调用的时候是这样写的
function I(getelement)
{
var tablepanel=getelement("tablepanel");
var mprev=getelement("prev");
alert(tablepanel.id);
test(getelement);
}
其实这里的test的参数并没有用到,我们可以不管它。
2. 在上面的代码中我们用VS.net的调试器调试,在test函数内部执行顺序如下
首先定位到tablepanel.onselectstart,但并没有执行alert方法
其次定位到mprev.ondblclick=function mprev.onclick() ,同样没有执行alert方法
最后执行alert("test")方法
这个顺序应该是IE解析器的规则,只是如果代码很多的话,可能会感觉定位的标志到处乱跳,很是不爽。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架