从零开始学_JavaScript_系列(18)——dojo(7)(dojo中类的继承)

关于声明及封装一个类,请查阅我的上一篇博客:

http://blog.csdn.net/qq20004604/article/details/51456809

(72)继承一个类

在(71)的基础上,我们继续。

我们之前声明了一个类add,那么计算时,仅仅只有add显然是不够的。我们还需要minus(减去)。

那么我们重新建一个文件minus,然后把add的内容复制过来,再给他加上减法功能,然后调用minus这个文件(像71那样),声明一个这样的实例?

显然太麻烦了。

 

这个时候,我们就需要用到继承的功能。

继承是很多的基础,javascript自己也带继承,但我这里不提,只说dojo的继承怎么用。

 

①建立文件:

像建立add.js文件那样建立一个minus.js文件。

 

②添加内容:

这个时候,我们用一个聪明的做法:

define(["dojo/_base/declare",
    "myclass/add"], function (declare, add) {
    return declare("anotherClass", [add], {

 

有没有发现不同?

在之前declare的第二个参数,我们使用的是null,而这里,我们使用的是add;

这里的add参数,来源于上面的回调函数的参数add;

而回调函数的add参数,来源于"myclass/add"这个插件(即我们之前封装的类),所以准确的说,我们调用dojo的插件时,实际上调用的是dojo给我们预先封装好的类。

 

通过这样的形式,我们在minus里继承了add的方法(各种,包括他的变量mynum)。

如何证明这一点,很简单,我们不要给minus添加任何方法,然后在html里引用他,就像这样:

require(["myclass/minus"], function (myclass) {
    var m = new myclass(1);
})

 

请注意,这里我们引用的是minus,而不是之前的add。

然后我们调用它,给他一个参数1。

由于我们没有给minus封装任何方法(包括构造函数),因此如果没有继承的话,声明这样一个类的实例,应该是没有任何反应的。

 

但实际上,控制台有反应,输出1。

 

这个输出来源于哪?很简单,是add构造函数里的

console.log(num)

 

这个num输出的是参数(即1)。

 

同样,假如我们想要调用add方法,也是可以的:

console.log(m.add(2));

控制台输出12(来源于add的变量mynum=10,在加上我们给的参数2)。

 

 

③添加自定义方法:

仅仅使用继承来的对象,我们显然是不够的,需要给他添加一个minus的方法。

define(["dojo/_base/declare",
    "myclass/add"], function (declare, add) {
    return declare("anotherClass", [add], {
        minus: function (num) {
            return this.mynum - num;
        }
    })
})

 

然后我们尝试去调用它(在html里面,或者其他引用这个类的地方):

require(["myclass/minus"], function (myclass) {
    var m = new myclass(1);
    console.log(m.minus(2));
})

 

输出1和8

第一个1是add的构造函数;

输出8是因为add的mynum=10,减去参数2,于是返回值是8。

 

这样,我们新建的类minus,同时具有add和minus两个类的方法了。

 

④多重继承

具体代码就不写了,思路是相同的。

假如我们在minus里继承一个乘法的类Multiply(之前定义好的),那么在define中调用它,比如是:

define([
    "dojo/_base/declare",
    "myclass/add",
    "myclass/Multiply"], function (declare, add, Multiply) {
    return declare("anotherClass", [add, Multiply], {
        minus: function (num) {
            return this.mynum - num;
        }
    })
})

 

在declare里引用其参数(放在add旁边,用逗号分隔)。

 

然后就可以使用Multiply这个类的类方法了。

 

注意:类名(declare的第一个参数)不能相同

 

⑤同名冲突:

假如有add和Multiply,都有一个同名函数(变量)mynum,那么minus里调用这个变量时,到底取谁的值呢?

测试得知,declare的第二个参数中,靠后的那个的值:

define([
    "dojo/_base/declare",
    "myclass/add",
    "myclass/Multiply"], function (declare, add, Multiply) {
    return declare("anotherClass", [Multiply, add], {})
})

比如这样,取得就是add的值;

 

如果是这样

[add, Multiply]

 

取得就是Multiply中mynum的值。

 

假如我们在minus里声明一个

mynum: 20

 

那么取的就是minus里的值20。

时间: 2024-08-17 21:20:45

从零开始学_JavaScript_系列(18)——dojo(7)(dojo中类的继承)的相关文章

从零开始学_JavaScript_系列(五)——dojo(基础,动画移动,重力模拟,动画合并,添加标签)

关于dojo的下载,请查看: https://dojotoolkit.org/download/ 建议下载FULL SOURCE版 如果需要讨论,请评论.或者站内信,我会尽快回复.   (1)加载 ①首先,先设置   <script>      //替代使用data-dojo-config,我们创建一个dojoConfig对象(是个设置)在我们调用dojo.js之前,他们功能相同      //这比通过一大堆设置来说,更易阅读         var dojoConfig = {       

从零开始学_JavaScript_系列(十)——dojo(3)(GRID表格创建、样式、列宽可变、排序、过滤器)

如果没有接触过dojo,建议阅读: http://blog.csdn.net/qq20004604/article/details/51028702 里面介绍了如何加载dojo.(当然,本篇也考虑了未使用过dojo的人,可以只阅读该链接关于dojo下载的部分,以获得dojo) 关于dojo的下载,请查看: https://dojotoolkit.org/download/ 建议下载FULL SOURCE版 如果需要讨论,请评论.或者站内信,我会尽快回复. (34)gridx gridx系列插件并

从零开始学_JavaScript_系列(九)——dojo(2)(AJAX、时间控件、鼠标事件、样式修改、事件移除、消息发布订阅)

如果没有接触过dojo,建议阅读: http://blog.csdn.net/qq20004604/article/details/51028702 里面介绍了如何加载dojo. 关于dojo的下载,请查看: https://dojotoolkit.org/download/ 建议下载FULL SOURCE版 如果需要讨论,请评论.或者站内信,我会尽快回复. (21)和(22)写的不好,跳过. (23)AJAX异步加载 插件:dojo/request 参数:request 语法(get): re

从零开始学_JavaScript_系列(14)——dojo(7)(饼图,BorderContainer,hashchange,弹窗)

5/5更新.BorderContainer自适应在本地时正常使用的方法,请查看原文代码之前那一段话 (60)创建一个饼形图 比较简单的标签声明法:(只需要修改数据即可) ①首先,加载dojo文件和样式文件:(关于style.css,需要根据自己找到的路径修改,或者使用我从官网上找到的链接:https://dojotoolkit.org/documentation/tutorials/1.10/charting/demo/style.css) <link rel="stylesheet&qu

从零开始学_JavaScript_系列(26)——dojo的aspect方法

(86)apsect 模块:dojo/aspect 参数:apsect   [方法一]:aspect.after(对象, "方法名", 回调函数) 说明: 将在指定对象的方法执行结束后,执行回调函数:   例如,在点击 <div id="aa" style="width:100px;height:100px;background-color:green"></div>   这样一个dom后,会触发test对象的test方法

从零开始学_JavaScript_系列(22)——dojo(9)(表单、JsonRest的post方法,widget的使用思路)

(74)dojo的表单模块 插件:dojo/dom-form 参数:domForm 解释:        当我们需要像服务器提交很多内容时(比如很多个input输入框,还有一些单选按钮.多选按钮),我们必须将这些输入框的值变成一个对象(也许还要转为一个json字符串),在post的时候将其传递给服务器:          假如一个一个读过去,这也太傻了.所以这就是dom-form方法的作用了.        先上代码: <!DOCTYPE html> <html> <head

从零开始学_JavaScript_系列(17)——dojo(6)(声明一个类declare)

(71)声明一个类declare 作用: 封装一个类,然后可以通过调用这个类,来调用其类方法.   优点: ①可以继承其他类的类方法:   ②假如我们需要使用一个类的类方法,而这个类依赖于5个插件.如果正常调用的话,我们需要在每个使用这个类的js文件里,调用这5个插件.当我们使用封装时,我们只需要调用这个类即可.而调用这个类的方法很简单.   ③可以使得代码模块化,按需加载.例如,我有封装好的A类B类C类,起初我用的是A类(假设A类依赖于20个插件),然后我可能弃用A类改用B类(B类使用与A类不

从零开始学_JavaScript_系列(十一)——dojo(4)(GRID表格进阶:格式化、style、数据获取、多重排序、点击事件)

如果没有阅读过gridx表格的基本运用教程,建议先阅读这篇(4天点击量已经接近5k): http://blog.csdn.net/qq20004604/article/details/51170919 里面很详细的说明了gridx表格的创建,常用模块,和基本使用. 如果没有接触过dojo,建议阅读: http://blog.csdn.net/qq20004604/article/details/51028702 里面介绍了如何加载dojo. 关于dojo的下载,请查看: https://dojo

从零开始学_JavaScript_系列(十一)——dojo(5)(GRID表格进阶:更新值,name,重置表结构/缓存,重绘表格)

如果没接触过dojo,或者是dojo的gridx控件,请查看我之前几篇博客,写的已经非常详细了 最重要的,更新grid中指定单元格的值,请拉到最后看(59) 至此,grid表格日常所需的常见功能已经基本完结.如果有其他功能需求,请评论提出. (54)获得某列的name属性 代码: grid.column(2).name(); 效果: ①获得第2+1=3列的name属性: ②这里的name属性指表头的名字,如图中红框的 补充: ③grid.column(2).width 显示本列宽度 ④grid.

从零开始学_JavaScript_系列(21)——dojo(8)(手把手教你封装一个widget)

(73)封装一个widget 醒目:必须在web环境下使用,无论是python的web.py或者是通过http访问网站环境,都可以,但纯本地是不可行的.   首先,什么是widget? 简单来说,就是一个dom结点,比如像这样: <div>     这是一个dom结点 </div>   为什么需要widget呢? 很简单,比如,我们想在这样一个地方: <div class="nodes"> </div>   添加很多个上面那个dom结点,