Sencha touch中的scope原理

一般我们在ajax提交数据时会这样写:

   func: function()
  {
           var me = this;
           Ajax.get(id, {
                      sucess: function(obj){
                         me.doSomeThing(obj);
                               //.........

                        }

           })
  }

  我们必须将this暂存起来,因为在callback中this已经不是当前的上下文了,而在sencha touch中我们可以这样:

 func: function()
  {
           Ajax.get(id, {
                      sucess: function(obj){
                         this.doSomeThing(obj);
                               //.........

                        },

                        scope: this

           })
  }

  我们通过指定scope就不用手动去暂存this指针了,callbak中的this自动变成了当前上下文,因为本人js菜鸟,以前只是会用,但是今天重新了一个自己的回调模块,也想这样让调用方传递一个scope来改变他们的this指针,但是却不知道怎么实现,于是充满好奇的打开了sencha touch的事件基类Ext. Base,里面有一个关键性js函数apply,于是上网搜索,恍然大悟(高手勿喷,以前不知道这个函数- -!)

   所以如果你自己写了一个Ajax.get(id, obj)库函数,可以这么写:

    Ajax.get = function(id, obj){
             //.....巴拉巴拉巴拉
             var me = obj.scope || this;
             obj.success.apply(me, arguments);
              //......巴拉巴拉巴拉
     }

这样,在以后调用这个函数的时候,只要指定了scope字段,在回调函数中this即指向了scope对象,这里obj.success.apply(me, arguments)的意思可以简单的理解为将obj.success方法的this指向me,并将参数列表arguments传递到obj.success.

 

  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值