dojo——AMD(二、AMD中class内部成员函数相互调用实现)

一、引言


      这两天写arcgis javascript代码的时候,自己以为对dojo的amd规范掌握了,可是后来碰到了一个问题,在每个module中成员函数调用另外一个成员函数必须使用this调用(这点不像java和C#,可以不使用this),这样当在module中一个成员函数中有click事件的时候this已经不是指向该类了,so如何解决==

二、遇到问题


/**
 * Created by xcy on 2017/2/22.
 */
define(["dojo/_base/declare"], function(declare) {
    return declare("",null,{
        //界面初始化函数
        startup:function () {
            alert("startup");
            this.init1();
            this.init2();
            this.initclick();
        },
        init1:function () {
            alert("init1");
        },
        init2:function () {
            alert("init2");
        },
        initclick:function () {
         $("#bt_1").click(function () {
             this.init1();
         });
        }

    });

});
当一般情况下调用成员函数的时候直接this+成员函数就ok,可是在上述代码中initclick(初始化控件事件函数)需要获取控件,在点击事件中使用其他成员函数,这个时候就会报错==


三、解决方法


      下面介绍两种解决方法

3.1 lang.hitch改变指针

/**
 * Created by xcy on 2017/2/22.
 */
define(["dojo/_base/declare","dojo/_base/lang"], function(declare,lang) {
    return declare("",null,{
        //界面初始化函数
        startup:function () {
            alert("startup");
            this.init1();
            this.init2();
            this.initclick();
        },
        init1:function () {
            alert("init1");
        },
        init2:function () {
            alert("init2");
        },
        initclick:function () {
         $("#bt_1").click(lang.hitch(this, function ()  {
             this.init1();
         }));
        }

    });

});
      这种情况下把click事件中的this指向修改为该类,所以直接可以调用了,挺简单,不过每次遇到这种情况得写这么句话。

3.2 提前写个变量记录this

/**
 * Created by xcy on 2017/2/22.
 */
define(["dojo/_base/declare","dojo/_base/lang"], function(declare,lang) {
    var self;
    return declare("",null,{
        //界面初始化函数
        init:function () {
            self=this;
            alert("main2_init");
            this.inittest();
            this.initclick();
        },
        inittest:function () {
            alert("main2_init1");
        },
        initclick:function () {
            $("#bt_1").click( function ()  {
                self.inittest();
            });
        }

    });

});
    这里我在外面写了个self变量用于存储this,然后在click事件里面可以随时直接使用,但是就是self里面有self造成资源浪费。

四、总结


主要内容

  • 类内成员函数调用成员函数出现问题
  • 改变this指向解决上述问题
  • 利用全局变量解决上述问题


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值