原型方法的不同寫(xiě)法居然會(huì)影響調(diào)試的解決方法
更新時(shí)間:2007年03月08日 00:00:00 作者:
上次我寫(xiě)過(guò)一篇文章,討論"JavaScript類(lèi)定義原型方法的兩種實(shí)現(xiàn)的區(qū)別"。研究后發(fā)現(xiàn)除了方法的初始化方式不同外,沒(méi)有發(fā)現(xiàn)別的原則上的卻別,也就是說(shuō)用哪種方式都一樣。可是后來(lái)發(fā)現(xiàn)在VS.NET中給原型方法設(shè)置斷點(diǎn)來(lái)調(diào)試時(shí),兩種定義方式卻出現(xiàn)了很大的差別。
先看如下代碼示例: 1 ToolBar.prototype.Dispose = function()
2 {
3 var elmt = this.GetElement(); ***
4 elmt.onselectstart = '';
5 elmt.oncontentmenu = '';
6 elmt.clearAttributes();
7 // todo
8 }
我的代碼運(yùn)行在這里出了錯(cuò),調(diào)試器VS.NET把代碼執(zhí)行光標(biāo)停在了第4行,而且不讓我拖拽上去。我想如果能拖上去就可以step into的跟蹤以下this.GetElement()方法嘛。既然不能拖,我就在第3行設(shè)一個(gè)breakpoint唄,設(shè)好后attach調(diào)試器,怎么不能停到代碼行3的地方呢?在調(diào)試器一看,斷點(diǎn)被VS.NET自動(dòng)設(shè)到第一行代碼上去了,并且整個(gè)的ToolBar.prototype.Dispose方法都是被highlight了@_@。于是我想手動(dòng)把breakpoint再設(shè)置到第3行代馬上去,卻怎么也不能成功。一在第3行上設(shè)置breakpoint就會(huì)自動(dòng)跳到第1行,但可以在第3行以后的代碼行上設(shè),比如4,5,6向后都可以。這里有個(gè)ugly的解決方法,就是在第3行代碼前一句無(wú)用的語(yǔ)句(簡(jiǎn)單的var定義變量是不行的,至少要var a=1;),把現(xiàn)在的第3行變成第4行就可以了。這種bug真是讓人莫名其妙哈。
今天發(fā)現(xiàn)可以這么來(lái)解決這個(gè)問(wèn)題,把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}
上面這個(gè)方法,就可以隨意的在第3行上設(shè)置breakpoint。這個(gè)問(wèn)題同時(shí)存在于VS.NET 2003和VS.NET 2005 beta1中。誰(shuí)有空拿VS.NET 2005 beta2看看這個(gè)問(wèn)題還有沒(méi)有。
先看如下代碼示例: 1 ToolBar.prototype.Dispose = function()
2 {
3 var elmt = this.GetElement(); ***
4 elmt.onselectstart = '';
5 elmt.oncontentmenu = '';
6 elmt.clearAttributes();
7 // todo
8 }
我的代碼運(yùn)行在這里出了錯(cuò),調(diào)試器VS.NET把代碼執(zhí)行光標(biāo)停在了第4行,而且不讓我拖拽上去。我想如果能拖上去就可以step into的跟蹤以下this.GetElement()方法嘛。既然不能拖,我就在第3行設(shè)一個(gè)breakpoint唄,設(shè)好后attach調(diào)試器,怎么不能停到代碼行3的地方呢?在調(diào)試器一看,斷點(diǎn)被VS.NET自動(dòng)設(shè)到第一行代碼上去了,并且整個(gè)的ToolBar.prototype.Dispose方法都是被highlight了@_@。于是我想手動(dòng)把breakpoint再設(shè)置到第3行代馬上去,卻怎么也不能成功。一在第3行上設(shè)置breakpoint就會(huì)自動(dòng)跳到第1行,但可以在第3行以后的代碼行上設(shè),比如4,5,6向后都可以。這里有個(gè)ugly的解決方法,就是在第3行代碼前一句無(wú)用的語(yǔ)句(簡(jiǎn)單的var定義變量是不行的,至少要var a=1;),把現(xiàn)在的第3行變成第4行就可以了。這種bug真是讓人莫名其妙哈。
今天發(fā)現(xiàn)可以這么來(lái)解決這個(gè)問(wèn)題,把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}
上面這個(gè)方法,就可以隨意的在第3行上設(shè)置breakpoint。這個(gè)問(wèn)題同時(shí)存在于VS.NET 2003和VS.NET 2005 beta1中。誰(shuí)有空拿VS.NET 2005 beta2看看這個(gè)問(wèn)題還有沒(méi)有。
相關(guān)文章
JavaScript操作select元素和option的實(shí)例代碼
這篇文章主要介紹了JavaScript操作select元素和option的實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2016-01-01微信小程序?qū)崿F(xiàn)分類(lèi)菜單激活狀態(tài)隨列表滾動(dòng)而自動(dòng)切換效果詳解
這篇文章主要介紹了微信小程序分類(lèi)菜單激活狀態(tài)跟隨列表滾動(dòng)自動(dòng)切換,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2023-01-01關(guān)于JavaScript的內(nèi)存與性能問(wèn)題解決匯總
這篇文章主要介紹了關(guān)于JavaScript的內(nèi)存與性能問(wèn)題解決匯總,在JavaScript中,頁(yè)面中事件處理程序的數(shù)量與頁(yè)面整體性能直接相關(guān),原因有很多,下面就一起來(lái)看看具體的總結(jié)吧2022-04-04javascript表單驗(yàn)證 - Parsley.js使用和配置
大家還記得我們?cè)?jīng)介紹過(guò)的表單驗(yàn)證jquery插件jquery.validationEngine吧;天介紹的Parsley同樣也可以幫助你只使用簡(jiǎn)單的配置即可實(shí)現(xiàn)表單驗(yàn)證功能,基于它的強(qiáng)大DOM-API,感興趣的你可以不要錯(cuò)過(guò)了哦2013-01-01Bootstrap中datetimepicker使用小結(jié)
這篇文章主要為大家詳細(xì)介紹了Bootstrap中datetimepicker的使用方法,一款功能強(qiáng)大的日期選擇控件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-12-12微信公眾平臺(tái)獲取access_token的方法步驟
這篇文章主要介紹了微信公眾平臺(tái)獲取access_token的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03Uniapp全局消息提示以及其組件的實(shí)現(xiàn)方法
當(dāng)時(shí)在做登錄那邊需要做一些交互,所以必不可少要用到消息提示框,下面這篇文章主要給大家介紹了關(guān)于Uniapp全局消息提示以及其組件的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-06-06