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
- dojo——AMD中class内部成员函数相互调用实现
- dojo——AMD中class使用
- C++随笔——成员函数的相互调用问题:
- C++实例 静态成员的引入——静态数据成员的定义、调用,静态成员函数的实现、调用。
- JS中class的实现方式,另模拟dojo.declare
- 在MFC中类内部建立线程处理函数以便调用类的成员函数和变量
- Class(java.lang.Class)类中成员函数的区别
- 在成员函数中调用构造函数
- 成员函数中调用虚函数
- c/c++笔试题——const类型的成员函数内部如何改变成员变量
- c/c++笔试题——const类型的成员函数内部如何改变成员变量
- c++中构造函数的相互调用
- JavaScript—在嵌套的内部函数中调用外部this的方法
- 实现不同js中方法相互调用
- JAVA与.NET的相互调用——通过Web服务实现相互调用
- JAVA与.NET的相互调用——通过Web服务实现相互调用
- JAVA与.NET的相互调用——通过Web服务实现相互调用
- JAVA与.NET的相互调用——通过Web服务实现相互调用
- 横竖屏切换
- numpy 常用操作
- 函数返回局部变量的几种情况
- 面试总结理论,持续更新
- Ashmem匿名共享内存系统
- dojo——AMD中class内部成员函数相互调用实现
- ActiveAndroid基础使用
- WebRTC 学习之 Conference 实现混音混屏
- linux运维笔记4
- 远程控制tightvnc的使用说明
- Java垃圾回收机制(一)
- 2017年最新版ecshop微信商城5级分销系统:新增微信拼团+手机版拼团+手机版砍价+微信登陆+红包提现+批量导入商品,全开源
- 年前提交了辞职信
- Java中守护线程的总结