arcgis api dojo 定义类

本文介绍了在Dojo中使用dojo/_base/declare模块创建类,实现面向对象编程。包括创建简单类、类与模块结合使用、类的继承等内容,还重新介绍了require加载模块的过程,如配置自定义模块路径、按顺序加载等,最后总结了类的使用要点。

转载出处:https://blog.youkuaiyun.com/LoveCarpenter/article/details/53981357

1.引言

         说到面向对象,我们就不得不提一下类,在原生的js中我们是不可以创建类的,没有class这个关键字,但是在dojo中,dojo自定义了一个模块叫做dojo/_base/declare,用这个模块我们可以创建自己的类,实现面向对象编程。在本篇博客中我们就来学习一下如何在我们应用程序中使用dojo/_base/declare创建类。

2.dojo中的类

首先我们先看一下dojo/_base/declare声明:

       declare(classname,[],{})          //declare有三个参数

declare的第一个参数是可选的,代表类的名称
declare的第二个参数代表类的继承关系,比如继承哪一个父类,可以看到:第二个参数是一个数组,所以dojo可以多继承
第三个参数是一个对象,代表类的主体。

-------2.1创建一个简单的类

      说完了类的继承,那么我们就创建一个非常简单的类:

var Person=declare("namespace.Person", null, {
    name:null,
    age:null,
    constructor: function(name,age){
            this.name=name;
            this.age=age;
        }

});

  上述代码建立了一个Person类,没有父类,构造函数为constructor

   我们如何创建一个Person类的实例呢?代码:

var p=new Person("wpx",20)

  上面的方法是很简单的一个类,但是有一个问题,如果类的属性特别多,那么我们构造函数里面的参数就会很多,有没有一种解决方法呢?答案是有的。现在看修改之后的代码。

var Person=declare("namespace.Person", null, {
    name:null,
    age:null,
    constructor: function(args){
            declare.safeMixin(this,args);
        }

});

那么我们在创建类的实例时,应该怎么办呢?代码:

var p=new Person({
    name:"wpx",
    age:20
})

   此时可能有朋友问了,类名有什么作用呢??类名可以用作类的全局引用比如上面的Person类还可以这样定义实例:

var p=new namespace.Person({
    name:"wpx",
    age:20
})

-------2.2类和模块的结合使用

   学过后台语言(我以前写c#)的人大多都习惯:一个类一个文件(同感)这样的话有利于我们管理我们的代码,那么在dojo中如何实现呢?代码如下:

------person.js
define(["dojo/_base/declare"],function(declare){
    return declare("namespace.Person",null,{
        name:null,
        age:null,
        constructor: function(args){
            declare.safeMixin(this,args);
        },
        toString:function(){
            return this.name+":"+this.age
        }
    })
})

调用我们自定义的类

require(["js/person"], function(Person) {
            var p=new Person({
                name:"wpx",
                age:20
            });
            alert(p.toString())
        });

假设我们的类名是namespace.Person,我们还可以这样引用(注意和上面的区别),也就是全局引用:

require(["js/person"], function() {
            var p=new namespace.Person({
                name:"wpx",
                age:20
            });
            alert(p.toString())
        });

---------2.3关于类的继承

      关于类的继承如何使用,在此处不多说,如果想要了解更多类的高级使用请查看官网: 
dojo创建类

3.-------------------------

4.

4.再次介绍require加载模块:

首先我们看一下我们加载的顺序:

è¿éåå¾çæè¿°

第一:如果我们有自定义模块,那么通过dojoConfig配置我们自定义模块的路径
第二:加载init的js文件(注意一定要在dojoConfig加载)
第三:require是按照顺序加载的,比如我require首先加载的是dijit/registry,那么后面的function里面就写一个变量代表dijit/registry模块,此时变量的名称无所谓,仅仅代表该模块,但是注意:图中的①处代表的是一个js文件,图中的②是一个自定义的变量(用来代表该模块)。
第四:大家注意到,我require中的第一个参数有六个模块,但是function中,却只有四个变量。此处说明:如果我们在funtcion函数中用不到该模块(注意是在function中用不到,并不是说明其他地方用不到),那么我们尽量将该模块往后放。
第五:在此声明:图中的①处代表的是一个js文件,图中的②是一个自定义的变量,既然是一个自定义变量,那么就意味着我们可以随便写(用来代表前面的js文件)。可能有人问,一个文件夹下面有很多的类,我们随便写不就乱套了吗?这种情况是不存在的。在此声明:图中的①处代表的是一个js路径,同一个文件夹下面是不可能存在同名文件的。

5.总结

在此篇博客中,主要说了

如何创建类,如何使用类,其中我们可以用define方法让我们的类是一个文件,便于管理。
在类中如何利用回调函数返回数据
如何在类中使用类外变量(可以通过构造函数传进来)
在类中正确的使用dojo/_base/lang模块,控制我们的this关键字
重新介绍了require的加载过程
注意我们定义了很多的类和模块,但是我们程序的入口确只有一个
 

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值