在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 相关文章推荐
JavaScript中的Document文档对象
Jan 16 Javascript
JQUERY操作JSON实例代码
Feb 09 Javascript
DLL+ ActiveX控件+WEB页面调用例子
Aug 07 Javascript
myFocus slide3D v1.1.0 使用方法与下载
Jan 12 Javascript
IE下JS读取xml文件示例代码
Aug 05 Javascript
使用jQuery实现星级评分代码分享
Dec 09 Javascript
js中unicode转码方法详解
Oct 09 Javascript
AngularJS 路由详解和简单实例
Jul 28 Javascript
微信小程序五子棋游戏的棋盘,重置,对弈实现方法【附demo源码下载】
Feb 20 Javascript
vue组件三大核心概念图文详解
May 30 Javascript
js实现无缝滚动双图切换效果
Jul 09 Javascript
vue 实现通过vuex 存储值 在不同界面使用
Nov 11 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
php 处理上百万条的数据库如何提高处理查询速度
2010/02/08 PHP
php数组键值用法实例分析
2015/02/27 PHP
php实现的简单日志写入函数
2015/03/31 PHP
功能强大的php文件上传类
2016/08/29 PHP
Yii2学习笔记之汉化yii设置表单的描述(属性标签attributeLabels)
2017/02/07 PHP
浏览器常用高宽的jquery插件
2011/02/24 Javascript
js禁止document element对象选中文本实现代码
2013/03/21 Javascript
jQuery使用fadein方法实现渐出效果实例
2015/03/27 Javascript
jQuery地图map悬停显示省市代码分享
2015/08/20 Javascript
jQuery插件实现表格隔行变色及鼠标滑过高亮显示效果代码
2016/02/25 Javascript
jQuery简单实现仿京东分类导航层效果
2016/06/07 Javascript
jQuery基本选择器之标签名选择器
2016/09/03 Javascript
微信小程序 页面跳转传递值几种方法详解
2017/01/12 Javascript
MUI  Scroll插件的使用详解
2017/04/13 Javascript
解析vue路由异步组件和懒加载案例
2018/06/08 Javascript
Vue props 单向数据流的实现
2018/11/06 Javascript
Vue生命周期activated之返回上一页不重新请求数据操作
2020/07/26 Javascript
phpsir 开发 一个检测百度关键字网站排名的python 程序
2009/09/17 Python
可用于监控 mysql Master Slave 状态的python代码
2013/02/10 Python
python网络编程之读取网站根目录实例
2014/09/30 Python
Python中非常实用的一些功能和函数分享
2015/02/14 Python
深入理解Python中字典的键的使用
2015/08/19 Python
Python内置数据结构与操作符的练习题集锦
2016/07/01 Python
微信跳一跳游戏python脚本
2020/04/01 Python
解决tensorflow训练时内存持续增加并占满的问题
2020/01/19 Python
html5画布旋转效果示例
2014/01/27 HTML / CSS
英国顶级足球鞋的领先零售商:Lovell Soccer
2019/08/27 全球购物
高中班主任评语大全
2014/04/25 职场文书
2014年教师政治学习材料
2014/06/02 职场文书
运动会口号8字
2014/06/07 职场文书
个人三严三实对照检查材料思想汇报
2014/09/22 职场文书
教师拔河比赛广播稿
2014/10/14 职场文书
安徽导游词
2015/02/12 职场文书
大学生党员自我评价
2015/03/04 职场文书
商场圣诞节活动总结
2015/05/06 职场文书
建国大业观后感600字
2015/06/01 职场文书