Mootools 1.2教程(21)——类(二)
作者:Fdream 来源:Fdream博客 发布时间:2008-12-28 20:58:00
原文地址:30 Days of Mootools 1.2 Tutorials - Day 21 - Classes part II
类——第二部分
阅读上一讲:Mootools 1.2教程(20)——选项卡效果(Tabs)
Fdream注:原文好像少了一部分,因此我自作主张地补充了下面这一段及BaseClass的代码。
在今天的教程中,我们将主要学习一下MooTools中类的实现和继承(扩展)。通过实现和继承,我们可以在子类中使用父类的方法,而不需要再重新声明和实现相同的方法。MooTools中的Class类可以帮助我们轻松地做到这一点。首先,我们定一个基类(base class)。
参考代码:
var BaseClass = new Class({
// 定义一个方法testFunction
// 这个方法弹出一个对话框
testFunction : function(){
alert('This function is defined in BaseClass');
}
现在,我们已经有了一个基类(base class),我们可以通过创建一个新类来实现它从而使用它的全部功能。注意,在下面的例子中,我们的新类没有做任何事情,而只是实现了基类BaseClass。
参考代码:
// 创建一个名叫ImplementingClass的类
var ImplementingClass = new Class({
// 我所做的全部事情就是实现Baseclass
Implements : BaseClass
现在,我们就可以创建一个ImplementingClass的实例,并使用在BaseClass中定义的方法。
参考代码:
var demo_one = function(){
// 创建一个ImplementingClass实例
var test_class = new ImplementingClass();
// 调用在BaseClass中定义的testFunction
test_class.testFunction();
}
你也可以对基类中的变量和初始化函数(构造函数)做同样的事情。如果你在实施类(实现基类的类)中声明了的话,每个你在基类中定义的东西就将被转移到实施类中。
注意:从现在开始,我们下面所有的示例中将全部使用下面这个版本的BaseClass。
参考代码:
var BaseClass = new Class({
// 把参数赋值给这个类中的inputVariable变量
initialize: function(input){
this.inputVariable = input;
},
// 显示变量inputVariable的值
testFunction : function(){
alert('BaseClass.testFunction() : ' + this.inputVariable);
},
// 为这个类的所有实例定义一个内部变量
definedVariable : "Defined in BaseClass",
});
var ImplementingClass = new Class({
// 重复一遍:
// 这里我们做的全部事情就只是实现BaseClass
Implements : BaseClass
});
下面的示例表明:初始化程序、函数调用和变量都可以被访问到,就像它们是属于这个实施类的。
参考代码:
var demo_two = function(){
// 创建一个ImplementingClass实例
var test_class = new ImplementingClass('this is the input value');
// 调用testFunction()(在BaseClass中定义的)
test_class.testFunction();
// 显示变量definedVariable的值
alert('test_class.testVariable : ' + test_class.definedVariable);
}
一旦你实现了一个类,你可以添加任何你想要的功能到你的实施类定义中。
参考代码:
var ImplementingClass = new Class({
Implements : BaseClass,
// 下面的这些功能都在BaseClass中定义了
definedVariable : "Defined in ImplementingClass",
testFunction : function(){
alert('This function is also defined in BaseClass');
},
// 下面的这些都没有在BaseClass中定义
anotherDefinedVariable : "Also Defined in ImplementingClass",
anotherTestFunction : function(){
alert('This function is defined in ImplementingClass');
}
});
请注意,我们在实施类中重新定义了testFunction和definedVariable,就像我们添加新的函数和变量一样。特别需要注意的是:如果你想在实施类中定义一个已经在基类中定义了的函数或者变量,基类中的定义将会取代实施类中的定义。如果不明白,看看下面的例子就知道了。
参考代码:
var demo_three = function(){
// 创建一个ImplementingClass实例
var test_class = new ImplementingClass('this is the input value');
// (执行BaseClass中定义的方法)
test_class.testFunction();
// 显示变量definedVariable的值(BaseClass中定义的值)
alert('test_class.testVariable : ' + test_class.definedVariable);
// (ImplementingClass中定义的方法)
test_class.anotherTestFunction();
// 显示变量anotherDefinedVariable的值(ImplementingClass中定义的值)
alert('test_class.anotherDefinedVariable : ' + test_class.anotherDefinedVariable);
}


猜你喜欢
- Flask file upload代码import osfrom flask import Flask, request, re
- OpenCV 是一个流行的开源计算机视觉库,可用于不同的编程语言,例如 Python、C++ 和 JavaScript。它提供了一套丰富的工
- Zabbix 是一款强大的开源网管监控工具,该工具的客户端与服务端是分开的,我们可以直接使用自带的zabbix_get命令来实现拉取客户端上
- 本文较为详细的分析了php单一入口应用程序。分享给大家供大家参考。具体如下:什么是单一入口应用程序?在解释什么是单一入口应用程序之前,我们先
- 前两篇文章对NumPy数组做了基本的介绍,本篇文章对NumPy数组进行较深入的探讨。首先介绍自定义类型的数组,接着数组的组合,最后介绍数组复
- 本文实例讲述了Python数据类型之Set集合。分享给大家供大家参考,具体如下:set集合1.概述set与dict类似,但set是一组key
- 假设红包金额为money,数量是num,并且红包金额money>=num*0.01原理如下,从1~money*100的数的集合中,随机
- 一、_func 单下划线开头 --口头私有变量1.1、在模块中使用单下划线开头在Python中,通过单下划线_来实现模块级别的私有化,变量除
- 此类技巧还有很多,欢迎继续分享解析 URL从 James Padolsey 的 Blog中看到的个小技巧,就是利用 a 标签的 DOM 属性
- 在不同平面上绘制二维条形图。本实例制作了一个3d图,其中有二维条形图投射到平面y=0,y=1,等。演示结果:完整代码:from mpl_to
- 本文实例讲述了Python时间的精准正则匹配方法。分享给大家供大家参考,具体如下:要用正则表达式精准匹配时间,其实并不容易方式一:>&
- 前言最近在写Vue项目的时候,遇到了一个问题,我从A路由使用parmas方式传参跳转到B路由,然后从B路由跳转到C路由,再从C路由返回B路由
- 木马原理:入侵者使用诸如ASP图片木马生成器之类的工具将一张正常的图片与一个ASP木马文件合并成一个图片文件(即将对网站有害的ASP代码插在
- 上个星期,大佬分享了一个验证身份证号合法性的库:id_validator,没空去试着用一下看看,今天有点时间,来试着用下这个库。1、首先,要
- 刚刚接触爬虫,基础的东西得时时回顾才行,这么全面的帖子无论如何也得厚着脸皮转过来啊!什么是 Urllib 库?urllib 库 是 Pyth
- 简介这是一篇介绍网页设计原则的文章。在互联网迅速发展的今天,各种web 2.0网站竞争激烈,你死我亡。Jini, D
- 前言pygame中的精灵碰撞是可见游戏中用的最基础的东西,这里结合官方文档和小甲鱼的网站上的内容做个小总结,方便日后使用。pygame.sp
- 1. 首先安装node,推荐偶数版本;好了之后检查一下: node -v;出现版本好即为安装成功;win10家庭版本的msi版本的时候出现无
- 我们知道,任何数据库系统都无法避免崩溃的状况,即使你使用了Clustered,双机热备……仍然无
- 获取一个类的所有子类def itersubclasses(cls, _seen=None): "