浅析js封装和作用域


Posted in Javascript onJuly 09, 2013

基本的代码如下

<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>  
</title>
<script src="jquery-1.4.4.min.js" type="text/javascript"></script> 
<script type="text/javascript">    
      var text="test"; 
   var   t=new functionTest(text); 
    function functionTest(text)
    {
          var alertText=text   
             $("#btnSave").click(function (e) {     
       alertTestInnert();   
    });             
          this.AlertTest= function ()
     {      
        alert(alertText);
     } 
      function alertTestInnert()
     {
        alert(alertText);
     } 
    } 
      function alertTestOuter()
   {
        alert(text);
   }
    </script>
<body>
 <input type="button" id="btnSave" class="button" value="保存"  />
 <input type="button" id="btnCancel" class="button" value="取消" onclick="javascript:t.AlertTest;" />
</body>
</html>

再点击保存,取消时需要一定的操作,第一次的代码如上:
点击保存,根本没反应,很奇怪,这种最常用的jquery绑定事件竟然不起作用了。后来一比较才知道,其实自己忘了,绑定应该在$(document).ready(function () {})中进行;
js修改如下:
 var text="test"; 
   $(document).ready(function () {
      var   t=new functionTest(text); 
 });   
    function functionTest(text)
    {
          var alertText=text   
             $("#btnSave").click(function (e) {     
       alertTestInnert();   
    });             
          this.AlertTest= function ()
     {      
        alert(alertText);
     } 
      function alertTestInnert()
     {
        alert(alertText);
     } 
    } 
      function alertTestOuter()
   {
        alert(text);
   }

修改后,点击保存可以了,而且正确的传递了参数,这样就可以保证在不同点的情况下传递不同的参数了。
但还有一种情况,页面会动态生成一些标签,这些标签的点击事件也需要处理。再次以取消按钮为例,由于是动态生成,就不能使用和保存一样的方法了。
只能使用onclick="javascript:t.AlertTest;"这种类似的绑定。于是有测试如下:
修改
 <input type="button" id="btnCancel" class="button" value="取消" onclick="javascript:t.AlertTest;" />

点击没反应,修改如下
 <input type="button" id="btnCancel" class="button" value="取消" onclick="javascript:alertTestOuter;" />

点击还是没反应,也没有错误,在修改如下:
 <input type="button" id="btnCancel" class="button" value="取消" onclick="javascript:alertTestOuter();" />

这次有反应了,看来是少了一对括号。修改为封装的方法如下:
<input type="button" id="btnCancel" class="button" value="取消" onclick="javascript:t.AlertTest();" />

点击没反应,提示Uncaught ReferenceError: t is not defined
看来是变量t没有定义,作用域起作用了。于是修改js如下,也就是把变量t放到外边,赋值放在里边,就是如下:
  var   t;
      var text="test"; 
   $(document).ready(function () {
          t=new functionTest(text); 
 });   
    function functionTest(text)
    {
          var alertText=text   
             $("#btnSave").click(function (e) {     
       alertTestInnert();   
    });             
          this.AlertTest= function ()
     {      
        alert(alertText);
     } 
      function alertTestInnert()
     {
        alert(alertText);
     } 
    } 
      function alertTestOuter()
   {
        alert(text);
   }

最后一步,如何给取消调用的方法传递参数?
第一步修改js如下,也就是把取消调用的函数改为需要传递参数的方法,代码如下:
  var   t;
      var text="test"; 
   $(document).ready(function () {
          t=new functionTest(text); 
 });   
    function functionTest(text)
    {
          var alertText=text   
             $("#btnSave").click(function (e) {     
       alertTestInnert();   
    });             
          this.AlertTest= function (text)
     {      
        alert(text);
     }      function alertTestInnert()
     {
        alert(alertText);
     } 
    } 
      function alertTestOuter()
   {
        alert(text);
   }

相应的html修改如下:
 <input type="button" id="btnCancel" class="button" value="取消" onclick="javascript:t.AlertTest('124');" />

点击,看看是不是正确的传递了参数,一切正常,看来这样就完成了。
最后整理js代码:
把通用的js代码放到一个js文件里,这里放到了common.js中,不同的代码放在htm中,修改后的所有代码如下:
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>  
</title>
<script src="jquery-1.4.4.min.js" type="text/javascript"></script> 
<script src="common.js" type="text/javascript"></script> 
<script type="text/javascript">  
      var   t;//需要定义的外边,否则点击取消时,不能访问到变量t
      var text="test"; //传递的参数
   $(document).ready(function () {      
          t=new functionTest(text); //给t赋值,定义不能放在这里边
 });
    </script>
<body>
 <input type="button" id="btnSave" class="button" value="保存"  />
 <input type="button" id="btnCancel" class="button" value="取消" onclick="javascript:t.AlertTest('124');" />
</body>
</html>

common.js的代码:
 function functionTest(text)
    {
          var alertText=text   
             $("#btnSave").click(function (e) {     
       alertTestInnert();   
    });             
          this.AlertTest= function (text)
     {      
        alert(text);
     }      function alertTestInnert()
     {
        alert(alertText);
     } 
    }   
Javascript 相关文章推荐
JS的IE和Firefox兼容性集锦
Dec 11 Javascript
js编码、解码函数介绍及其使用示例
Sep 05 Javascript
jquery滚动到顶部底部代码
Apr 20 Javascript
jquery实现网页的页面平滑滚动效果代码
Nov 02 Javascript
jQuery实现公告新闻自动滚屏效果实例代码
Jul 14 Javascript
微信小程序 input输入框控件详解及实例(多种示例)
Dec 14 Javascript
JS实现的JSON序列化操作简单示例
Jul 02 Javascript
Vue中的基础过渡动画及实现原理解析
Dec 04 Javascript
javascript获取select值的方法完整实例
Jun 20 Javascript
Vue Element UI + OSS实现上传文件功能
Jul 31 Javascript
JS+CSS实现3D切割轮播图
Mar 21 Javascript
Selenium执行JavaScript脚本的方法示例
Dec 31 Javascript
js正则表达式的使用详解
Jul 09 #Javascript
解析Jquery的LigerUI如何实现文件上传
Jul 09 #Javascript
Js(JavaScript)中,弹出是或否的选择框示例(confirm用法的实例分析)
Jul 09 #Javascript
探讨在JQuery和Js中,如何让ajax执行完后再继续往下执行
Jul 09 #Javascript
Jquery中LigerUi的弹出编辑框(实现方法)
Jul 09 #Javascript
浅析js中取绝对值的2种方法
Jul 09 #Javascript
浅析LigerUi开发中谨慎载入common.css文件
Jul 09 #Javascript
You might like
IIS环境下快速安装、配置和调试PHP5.2.0
2006/12/17 PHP
在PHP中读取和写入WORD文档的代码
2008/04/09 PHP
PHP类与对象中的private访问控制的疑问
2012/11/01 PHP
php删除文件夹及其文件夹下所有文件的函数代码
2013/01/23 PHP
Linux环境下搭建php开发环境的操作步骤
2013/06/17 PHP
Javascript操纵Cookie实现购物车程序
2007/02/15 Javascript
发一个自己用JS写的实用看图工具实现代码
2008/07/26 Javascript
$.format,jquery.format 使用说明
2011/07/13 Javascript
Javascript Request获取请求参数如何实现
2012/11/28 Javascript
关闭页面window.location事件未执行的原因及解决方法
2014/09/01 Javascript
JavaScript动态添加css样式和script标签
2016/07/19 Javascript
BootStrap tab选项卡使用小结
2020/08/09 Javascript
详解webpack+es6+angular1.x项目构建
2017/05/02 Javascript
详解vue2.0+vue-video-player实现hls播放全过程
2018/03/02 Javascript
Vue 实时监听窗口变化 windowresize的两种方法
2018/11/06 Javascript
vue + element-ui的分页问题实现
2018/12/17 Javascript
npm 常用命令详解(小结)
2019/01/17 Javascript
原生js拖拽功能制作滑动条实例代码
2021/02/05 Javascript
[10:28]2018DOTA2国际邀请赛寻真——VGJ.S寻梦之路
2018/08/15 DOTA
python实现简单的socket server实例
2015/04/29 Python
简介Django框架中可使用的各类缓存
2015/07/23 Python
深入解析Python设计模式编程中建造者模式的使用
2016/03/02 Python
TensorFlow实现checkpoint文件转换为pb文件
2020/02/10 Python
使用Python将Exception异常错误堆栈信息写入日志文件
2020/04/08 Python
python中使用input()函数获取用户输入值方式
2020/05/03 Python
canvas之万花筒效果的简单实现(推荐)
2016/08/16 HTML / CSS
用React加CSS3实现微信拆红包动画效果
2017/03/13 HTML / CSS
浅谈CSS3 动画卡顿解决方案
2019/01/02 HTML / CSS
纽约家具、家居装饰和地毯店:ABC Carpet & Home
2017/06/21 全球购物
iHerb香港:维生素、补充剂和天然保健品
2017/08/01 全球购物
加拿大时装零售商:Influence U
2018/12/22 全球购物
Amcal中文官网:澳洲综合性连锁药房
2019/03/28 全球购物
早会开场白台词大全
2015/06/01 职场文书
感恩教师主题班会
2015/08/12 职场文书
前端学习——JavaScript原生实现购物车案例
2021/03/31 Javascript
浅谈sql_@SelectProvider及使用注意说明
2021/08/04 Java/Android