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

2016-02-19 10:28 4 1 收藏

图老师设计创意栏目是一个分享最好最实用的教程的社区,我们拥有最用心的各种教程,今天就给大家分享在js中使用"with"语句中跨frame的变量引用问题的教程,热爱PS的朋友们快点看过来吧!

【 tulaoshi.com - Web开发 】

在脚本编程时使用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中的滑铁卢"中了。

来源:https://www.tulaoshi.com/n/20160219/1594772.html

延伸阅读
MySQL-Proxy处在MySQL数据库客户和服务端之间的程序,它支持嵌入性脚本语言Lua。这个代理可以用来分析、监控和变换(transform)通信数据,它支持非常广泛的使用场景: ·负载平衡和故障转移处理 ·查询分析和日志 ·SQL宏(SQL macros) ·查询重写(query rewriting) ·执行shell命令 MySQL Proxy...
标签: 宝宝
宝宝自己玩:0-3岁的独立游戏 如果有一天,你发现宝宝一个人在房间里玩得不亦乐乎,你应该为他感到高兴,这是宝宝独自游戏的开始。千万别打破这个小小的私人空间,让他充分享受独自游戏的机会和乐趣。放手让宝宝自己玩独自游戏是宝宝自立的萌芽。爸爸妈妈要给孩子独立的私人空间和时间,放手让他们自己玩。这并不等于说父母可以对宝宝大撒把...
标签: 学习 孩子
如何让孩子主动学习 不少家长抱怨孩子学习不自觉,让人操心。不少老师也感觉到,孩子学习的依赖性特别强,从收拾书包到做作业,处处透着家长的影子。与此同时,孩子的自主学习能力越来越差。如果孩子缺乏自主学习的能力,会直接影响成绩的提高和自信心的形成,严重的还可能引起厌学情绪,家长应该引起关注。问题:学习依赖性强镜头一:幼儿园...
标签: 电脑入门
QQ空间的“好友圈”功能增强空间好友之间的互动,但也带来了新的问题。“好友圈”会将我们添加的好友显示出来,这样会暴露我们的隐私。 我们可以用下面的方法将自己的好友隐藏起来: 进入自己的QQ空间,点击“好友圈”→“管理好友”,选中你不想公开的好友,在“批量设置”处,选择取消公开。 图1 最后,我们将设置保...
标签: Web开发
"文档"窗口 "文档"窗口显示当前文档。可以选择下列任一视图: "设计"视图是一个用于可视化页面布局、可视化编辑和快速应用程序开发的设计环境。在该视图中,Dreamweaver 显示文档的完全可编辑的可视化表示形式,类似于在浏览器中查看页面时看到的内容。 "代码"视图是一个用于编写和编辑 HTML、JavaScript、服务器语言代码(如...

经验教程

91

收藏

9
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部