javascript在ajax应用中的一个重要特征

ajax应用中,javascript是少不了的。当编写面向对象的javascript时候虽然它本身并不要求使用对象,甚至不要求使用函数,但随着程序逐渐变大的时候,这将是极其有用的方式---它最容易让人出错,而它又是在开发ajax客户端时要严重依赖的特征。
    当我们获得一个DOM元素句柄,并分配了一个回调函数给onclick属性。当该DOM元素获得点击事件时,回调即被调用,此时函数上下文被赋值为收到事件DOM节点。函数最初在什么地方声明、如何声明,这些都将会使情况会有所不同,这通常会让人头疼。一起来看下面的例子。
    定义一个Button对象:
            Function Button(value,domEl){
                   This.domEl=domEl;
                   This.value=value;
                   This.domEl.οnclick=this.clickHandler;
             }

    回调函数如下:
              Button.prototype.clickHandler=function(value){
                    Alert(this.value);
              }

    我们定义了一个按钮对象的类,它有一个到DOM节点的引用、一个回调处理函数(当鼠标点击时显示一个值)。任何按钮的实例在收到鼠标单击事件的时候都将以同样的方式响应。
    我们的初衷是当点击的时候弹出警告框返回消息,而事实是对话框返回了
undefined却不是vlaue值。问题在哪?当我们点击DOM元素的时候,函数clickHandler由浏览器调用,它设置函数上下文是DOM元素,而不是我们定义的Button对象。这样,this.value指向的是DOM元素的vlaue属性而不是Buttonvalue
    我们可以向
DOM元素传递Button对象的引用来解决这个问题,就像这样:
               Function Button(value,domEl){
                       This.domEl=domEl;
                       This.value=value;
                       This.domEl.buttonObj=this;
                       This.domEl.οnclick=this.clickHandler;
                }

    事件处理函数更改如下:
                Button.prototype.clickHandler=function(value){
                        Var buttonObj=this.buttonObj;
                        Var value=(buttonObj&&buttonObj.value)?buttonObj.value:”unknown value”;
                        Alert(value);
                 }
          DOM
节点引用Button对象,然后调用ButtonValue属性,这样就完成了我们希望的事情。

 注:文中译自ajax in action

 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值