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

来源:互联网 发布:windows动画不流畅 编辑:程序博客网 时间:2024/05/18 02:31

一、引言


      这两天写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指向解决上述问题
  • 利用全局变量解决上述问题


0 0
原创粉丝点击