在js中使用"with"语句中跨frame的变量引用问题


Posted in Javascript onMarch 08, 2007

在脚本编程时使用with语句,可以大大的缩减使用多级对象引用代码行的长度,这是JScript提供给我们的一个Syntax Sugar。当然不使用with,使用临时变量也可以达到同样的效果。不过创建变量时起名确实不是一件很遐意的事,就连MASM高版本中也提供了一个@@(以及@F和@B)来处理临时标号的问题,看来大家都是比较懒得啦。 

     我也挺喜欢用with语句的,确实可以省不少的事情,而且可以让代码变得也清晰些,特别是在处理跨frame的变量引用时,更加显得方便。这不今天就因为贪图方便又撞到枪口上了,在with中去取跨frame的变量时,遇到一个莫名其妙的bug郁闷了半天。 

     我写的代码其实不复杂,就是在一个with中,作了很多另一个frame中的变量引用和计算操作后,把结果赋值到本页面函数的一个局部变量里。事例代码大概如下:  // ... 
 var hierarchies = []; 
 with(parent.frames['xxxFrame']) 
 { 
     // 引用xxxFrame里的变量和值产生我要的东西 
     hierarchies.push(xxx); 
 } 

 // 开始使用hierarchies 
     这时hierarchies比较发疯,不管怎么弄里面的值老是和想要得值有却别,但又不是完全不对(后面会说为什么会这样,同时这是也严重迷惑我debug的一个地方,被害惨了)。 

     为什么会这样?最后查出来原来是xxxFrame里也有一个叫hierarchies的变量,而且也是数组,放的内容居然也和我放的差不多,所以我前面说了为什么会被迷惑了吧。而且还不止这点,由于之前还写了一个这种类似的with来跨页面取数据,而且工作的很好,所以潜意识就觉得,with里的那个hierarchies就是with外的那个hierarchies。我也不记得xxxFrame中那个变量是不是我自己定义的了,反正debug时被郁闷了好一阵子:(。 

     JScript手册说with(objects) statements的作用是:为语句设定默认对象。不过在with内部对变量的作用范围,它有个搜索规则,就是优先做默认对象(objects)中的匹配。虽然有时觉得默认对象的作用域更"远",就像跨frame这种情况。当默认对象引用中不能匹配,就匹配with之前被声明过的变量。都不能匹配到就是undefined了。 

     本文只能老实收入"debug中的滑铁卢"中了。

Javascript 相关文章推荐
了解jQuery技巧来提高你的代码(个人觉得那个jquery的手册很不错)
Feb 10 Javascript
js返回上一页并刷新代码整理
Dec 21 Javascript
一个级联菜单代码学习及removeClass与addClass的应用
Jan 24 Javascript
jQuery插件实现控制网页元素动态居中显示
Mar 24 Javascript
wangEditor编辑器失去焦点后仍然可以在原位置插入图片分析
May 06 Javascript
jquery实现平滑的二级下拉菜单效果
Aug 26 Javascript
javascript基础知识
Jun 07 Javascript
xtemplate node.js 的使用方法实例解析
Aug 22 Javascript
关于JavaScript数组你所不知道的3件事
Aug 24 Javascript
前端图片懒加载(lazyload)的实现方法(提高用户体验)
Aug 21 Javascript
vue2.x数组劫持原理的实现
Apr 19 Javascript
JavaScript对象访问器Getter及Setter原理解析
Dec 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
JavaScript中this关键字使用方法详解
Mar 08 #Javascript
You might like
一些星际专用术语解释
2020/03/04 星际争霸
PHP实现图片简单上传
2006/10/09 PHP
PHP substr 截取字符串出现乱码问题解决方法[utf8与gb2312]
2011/12/16 PHP
php/js获取客户端mac地址的实现代码
2013/07/08 PHP
用jquery模仿的a的title属性(兼容ie6/7)
2013/01/21 Javascript
js变换显示图片的实例
2013/04/16 Javascript
JSCode all of Brower 全局屏蔽网页右键功能 具体实现
2013/06/05 Javascript
原生javascript实现的分页插件pagenav
2014/08/28 Javascript
自定义jQuery插件方式实现强制对象重绘的方法
2015/03/23 Javascript
图解js图片轮播效果
2015/12/20 Javascript
JavaScript Date对象详解
2016/03/01 Javascript
jQuery解决IE6、7、8不能使用 JSON.stringify 函数的问题
2016/05/31 Javascript
详解vue 实例方法和数据
2017/10/23 Javascript
Angular中点击li标签实现更改颜色的核心代码
2017/12/08 Javascript
vue2.0结合Element-ui实战案例
2019/03/06 Javascript
vue 中 命名视图的用法实例详解
2019/08/14 Javascript
微信小程序 多行文本显示...+显示更多按钮和收起更多按钮功能
2019/09/26 Javascript
vue实现简易的双向数据绑定
2020/12/29 Vue.js
python邮件发送smtplib使用详解
2020/06/16 Python
Selenium控制浏览器常见操作示例
2018/08/13 Python
对python产生随机的二维数组实例详解
2018/12/13 Python
详解Python3 基本数据类型
2019/04/19 Python
Django中reverse反转并且传递参数的方法
2019/08/06 Python
解析Python3中的Import
2019/10/13 Python
python matplotlib拟合直线的实现
2019/11/19 Python
python pprint模块中print()和pprint()两者的区别
2020/02/10 Python
解决python中import文件夹下面py文件报错问题
2020/06/01 Python
美国畅销的跑步机品牌:ProForm
2017/02/06 全球购物
物流管理专业应届生求职信
2013/11/21 职场文书
大学自我鉴定
2013/12/20 职场文书
中级会计职业生涯规划范文
2014/01/16 职场文书
导游个人求职信范文
2014/03/23 职场文书
2014年五四青年节活动策划书
2014/04/22 职场文书
心理学专业求职信
2014/06/16 职场文书
平凡的世界读书笔记
2015/06/25 职场文书
导游词之山西关帝庙
2019/11/01 职场文书