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


Posted in Javascript onMarch 08, 2007

上次我写过一篇文章,讨论"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看看这个问题还有没有。

Javascript 相关文章推荐
url地址自动加#号问题说明
Aug 21 Javascript
js作用域及作用域链概念理解及使用
Apr 15 Javascript
js弹出确认是否删除对话框
Mar 27 Javascript
JavaSacript中charCodeAt()方法的使用详解
Jun 05 Javascript
js倒计时简单实现方法
Dec 17 Javascript
JavaScript箭头函数_动力节点Java学院整理
Jun 28 Javascript
vue监听input标签的value值方法
Aug 27 Javascript
CKeditor富文本编辑器使用技巧之添加自定义插件的方法
Jun 14 Javascript
layui button 按钮弹出提示窗口,确定才进行的方法
Sep 06 Javascript
js实现鼠标拖拽div左右滑动
Jan 15 Javascript
Layer UI表格列日期格式化及取消自动填充日期的实现方法
May 10 Javascript
原生javascript如何实现共享onload事件
Jul 03 Javascript
在js中使用"with"语句中跨frame的变量引用问题
Mar 08 #Javascript
JS类库Bindows1.3中的内存释放方式分析
Mar 08 #Javascript
使用IE的地址栏来辅助调试Web页脚本
Mar 08 #Javascript
JScript中的undefined和"undefined"的区别
Mar 08 #Javascript
JavaScript语句可以不以;结尾的烦恼
Mar 08 #Javascript
JScript中的"this"关键字使用方式补充材料
Mar 08 #Javascript
function, new function, new Function之间的区别
Mar 08 #Javascript
You might like
跟我学Laravel之快速入门
2014/10/15 PHP
IIS 7.5 asp Session超时时间设置方法
2017/04/17 PHP
PHP面向对象程序设计之对象的遍历操作示例
2019/06/12 PHP
关于Laravel参数验证的一些疑与惑
2019/11/19 PHP
各种常用浏览器getBoundingClientRect的解析
2009/05/21 Javascript
Javascript 命名空间模式
2013/11/01 Javascript
javascript移出节点removeChild()使用介绍
2014/04/03 Javascript
用js闭包的方法实现多点标注冒泡示例
2014/05/29 Javascript
探讨js字符串数组拼接的性能问题
2014/10/11 Javascript
js实现上传图片预览的方法
2015/02/09 Javascript
提交按钮的name='submit'引起的js失效问题及原因
2015/02/25 Javascript
javascript限制文本框输入值类型的方法
2015/05/07 Javascript
js事件监听器用法实例详解
2015/06/01 Javascript
使用AngularJS创建自定义的过滤器的方法
2015/06/18 Javascript
七个不允许错过的jQuery小技巧
2015/12/21 Javascript
JS跨域交互(jQuery+php)之jsonp使用心得
2016/07/01 Javascript
javascript实现的左右无缝滚动效果
2016/09/19 Javascript
利用JS判断鼠标移入元素的方向
2016/12/11 Javascript
JavaScript 中 apply 、call 的详解
2017/03/21 Javascript
javascript中call()、apply()的区别
2019/03/21 Javascript
JavaScript使用面向对象实现的拖拽功能详解
2019/06/12 Javascript
小程序按钮避免多次调用接口和点击方案实现(不用showLoading)
2020/04/15 Javascript
vue 判断元素内容是否超过宽度的方式
2020/07/29 Javascript
[55:11]完美世界DOTA2联赛PWL S2 SZ vs LBZS 第一场 11.26
2020/11/30 DOTA
Python多进程通信Queue、Pipe、Value、Array实例
2014/11/21 Python
使用Python编写简单的端口扫描器的实例分享
2015/12/18 Python
Python批量更改文件名的实现方法
2017/10/29 Python
is_file和file_exists效率比较
2021/03/14 PHP
HTML5制作3D爱心动画教程 献给女友浪漫的礼物
2014/11/05 HTML / CSS
如何在Canvas上的图形/图像绑定事件监听的实现
2020/09/16 HTML / CSS
Myprotein中国网站:欧洲畅销运动营养品牌
2021/02/11 全球购物
JSF面试题:Jsf中导航的标签是什么
2013/04/20 面试题
业务员岗位职责
2013/11/16 职场文书
工作建议书范文
2014/05/13 职场文书
2015年世界环境日活动方案
2015/05/05 职场文书
第一书记观后感
2015/06/08 职场文书