当前位置: 首页 > 图文教程 > 网络编程 > Javascript > 原型方法的不同写法居然会影响调试的解决方法

Javascript
javascript innerText和innerHtml应用
图像替换新技术 状态域方法
JavaScript 判断判断某个对象是Object还是一个Array
Extjs 几个方法的讨论
JavaScript 学习笔记(十五)
javascript 匿名函数的理解(透彻版)
Jquery 常用方法经典总结
jquery 批量上传图片实现代码
javascript中的array数组使用技巧
详细讲解JS节点知识
javascript让setInteval里的函数参数中的this指向特定的对象
javaScript 关闭浏览器 (不弹出提示框)
对字符串进行HTML编码和解码的JavaScript函数
javascript 三种编解码方式
js左侧多级菜单动态的解决方案
JavaScript 学习笔记(十六) js事件
JavaScript面向对象之静态与非静态类
javascript两段代码,两个小技巧
js中鼠标滚轮事件详解(firefox多浏览器)
js实现的仿Photoshop鼠标滚轮控制输入框取值(修正兼容Chrome)

Javascript 中的 原型方法的不同写法居然会影响调试的解决方法


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-12   浏览: 119 ::
收藏到网摘: n/a

上次我写过一篇文章,讨论"JavaScript类定义原型方法的两种实现的区别"。研究后发现除了方法的初始化方式不同外,没有发现别的原则上的却别,也就是说用哪种方式都一样。可是后来发现在VS.NET中给原型方法设置断点来调试时,两种定义方式却出现了很大的差别。
先看如下代码示例: 1 ToolBar.prototype.Dispose = function()
2 {
3 var elmt = this.GetElement(); ***
4 elmt.onselectstart = '';
5 elmt.oncontentmenu = '';
6 elmt.clearAttributes();
7 // todo
8 }
我的代码运行在这里出了错,调试器VS.NET把代码执行光标停在了第4行,而且不让我拖拽上去。我想如果能拖上去就可以step into的跟踪以下this.GetElement()方法嘛。既然不能拖,我就在第3行设一个breakpoint呗,设好后attach调试器,怎么不能停到代码行3的地方呢?在调试器一看,断点被VS.NET自动设到第一行代码上去了,并且整个的ToolBar.prototype.Dispose方法都是被highlight了@_@。于是我想手动把breakpoint再设置到第3行代马上去,却怎么也不能成功。一在第3行上设置breakpoint就会自动跳到第1行,但可以在第3行以后的代码行上设,比如4,5,6向后都可以。这里有个ugly的解决方法,就是在第3行代码前一句无用的语句(简单的var定义变量是不行的,至少要var a=1;),把现在的第3行变成第4行就可以了。这种bug真是让人莫名其妙哈。
今天发现可以这么来解决这个问题,把ToolBar.prototype.Dispose = function()改成:function ToolBar.prototype.Dispose()就行了!真是怪!~ 1function ToolBar.prototype.Dispose()
2{
3 var elmt = this.GetElement(); ***
4 elmt.onselectstart = '';
5 elmt.oncontentmenu = '';
6 elmt.clearAttributes();
7 // todo
8}
上面这个方法,就可以随意的在第3行上设置breakpoint。这个问题同时存在于VS.NET 2003和VS.NET 2005 beta1中。谁有空拿VS.NET 2005 beta2看看这个问题还有没有。