Mootools 1.2教程 类(一)


Posted in Javascript onSeptember 15, 2009

简单地讲,一个类就是一个容器,这个容器包含了一些变量集合和操作这些变量的函数,以便实现特定的功能。在一个内容牵涉较多的项目中,类会显得难以置信的有用。
变量
在前面一系列的课程中,我们已经学习过了Hash对象中键值对(key/value pair)的使用方式,因此,下面的这个例子中创建了一个类,它只包含了一些变量,你看起来可能会觉得非常的熟悉:
参考代码:

// 创建一个名为class_one的类 
// 包含两个内部变量 
var Class_one = new Class({ 
variable_one : "I'm First", 
variable_two : "I'm Second" 
});

类似地,你可以通过类似访问hash中的变量的方式来访问其中的变量,注意一下,在下面的代码中,我们创建了一个我们在上面定义的Class_one类的实例。
参考代码:
var run_demo_one = function(){ 
// 创建类Class_one的一个实例,名称为demo_1 
var demo_1 = new Class_one(); 
// 显示demo_1中的变量 
alert( demo_1.variable_one ); 
alert( demo_1.variable_two ); 
}

方法/函数
方法是指一个指定的类中的函数(通俗地说就是一个类中的函数就叫做方法,换了个叫法而已)。这些方法必须通过这个类的实例来调用,而类本身不能调用它们。你可以像定义一个变量来定义一个方法,不同的是你需要给它指定一个静态的值,给它指定一个匿名函数:
参考代码:
var Class_two = new Class({ 
variable_one : "I'm First", 
variable_two : "I'm Second", 
function_one : function(){ 
alert('First Value : ' + this.variable_one); 
}, 
function_two : function(){ 
alert('Second Value : ' + this.variable_two); 
} 
});

注意一下上面例子中的关键字this的使用。由于在上面的方法中操作的变量都是类内部的变量,因此你需要通过使用关键字this来访问这些变量,否则你将只能得到一个undefined值。
参考代码:
// 正确 
working_method : function(){ 
alert('First Value : ' + this.variable_one); 
}, 
// 错误 
broken_method : function(){ 
alert('Second Value : ' + variable_two); 
}

调用新创建的类中的方法就像访问那些类的变量一样。
参考代码:
var run_demo_2 = function(){ 
// 实例化一个类class_two 
var demo_2 = new Class_two(); 
// 调用function_one 
demo_2.function_one(); 
// 调用function_two 
demo_2.function_two(); 
}

initialize方法
类对象中的initialize选项可以让你来对类进行一些初始化操作,也可以让你来处理一些可供用户设置的选项和变量。(Fdream注:实际上这个就相当于类的初始化方法。)你可以像定义方法一样来定义它:
参考代码:
var Myclass = new Class({ 
// 定义一个包含一个参数的初始化方法 
initialize : function(user_input){ 
// 创建一个属于这个类的变量 
// 并给它赋值 
// 值为用户传进来的值 
this.value = user_input; 
} 
})

你也可以通过这个初始化来改变其他的选项或者行为:
参考代码:
var Myclass = new Class({ 
initialize : function(true_false_value){ 
if (true_false_value){ 
this.message = "Everything this message says is true"; 
} 
else { 
this.message = "Everything this message says is false"; 
} 
} 
}) 
// 这将设置myClass实例的message属性为下面的字符串 
// "Everything this message says is true" 
var myclass_instance = new Myclass(true); 
// 这将设置myClass实例的message属性为下面的字符串 
// "Everything this message says is false" 
var myclass_instance = new Myclass(false);

所有的这一切工作都不需要声明任何其他变量或者方法。只需要记住每个键值对后面的逗号就行了。真的是非常容易漏掉一个逗号,然后花费大量的时间来追踪这些不存在的漏洞。
参考代码:
var Class_three = new Class({ 
// 当类创建的时候就会执行这个类 
initialize : function(one, two, true_false_option){ 
this.variable_one = one; 
this.variable_two = two; 
if (true_false_option){ 
this.boolean_option = "True Selected"; 
} 
else { 
this.boolean_option = "False Selected"; 
} 
}, 
// 定义一些方法 
function_one : function(){ 
alert('First Value : ' + this.variable_one); 
}, 
function_two : function(){ 
alert('Second Value : ' + this.variable_two); 
} 
}); 
var run_demo_3 = function(){ 
var demo_3 = new Class_three("First Argument", "Second Argument"); 
demo_3.function_one(); 
demo_3.function_two(); 
}

实现选项功能
当创建类的时候,给类中的一些变量设置一些默认值会非常有用,如果用户没有提供初始输入的话。你可以手动地在初始化方法中设置这些变量,检查每一个输入来看用户是不是提供了相应的值,然后替换相应的默认值。或者,你也可以使用MooTools中Class.extras提供的Options类来实现。
给你的类增加一个选项功能非常简单,就像给类添加一个其他的键值对一样:
参考代码:
var Myclass = new Class({ 
Implements: Options 
})

首先不要太着急实现选项的细节问题,我们会在后面的教程中更深入的学习。现在,我们已经拥有一个有选项功能的类了,我们还需要做的就是定义一些默认的选项。和其他的所有东西一样,只需要添加一些需要初始化的键值对就可以了。与定义单个值不一样的是,你需要像下面这样定义一组键值对集合:
参考代码:
var Myclass = new Class({ 
Implements: Options, 
options: { 
option_one : "First Option", 
option_two : "Second Option" 
} 
})

现在我们就有了这些默认的集合,我们还需要提供一个方式来供用户在初始化这个类的时候覆盖这些默认值。你所要做的工作就是在你的初始化函数中增加一行新的代码,而Options类会完成其余的工作:
参考代码:
var Myclass = new Class({ 
Implements: Options, 
options: { 
option_one : "First Default Option", 
option_two : "Second Default Option" 
} 
initialize: function(options){ 
this.setOptions(options); 
} 
})

一旦这个完成以后,你就可以通过传递一组键值对来覆盖任何默认选项:
参考代码:
// 覆盖所有的默认选项 
var class_instance = new Myclass({ 
options_one : "Override First Option", 
options_two : "Override Second Option" 
}); 
// 覆盖其中的一个默认选项 
var class_instance = new Myclass({ 
options_two : "Override Second Option" 
})

注意一下初始化函数中的setOptions方法。这是Options类中提供的一个方法,可以让你在实例化一个类的时候设置选项。
参考代码:
var class_instance = new Myclass(); 
// 设置第一个选项 
class_instance.setOptions({options_one : "Override First Option"});

一旦设置了选项,你就可以通过变量options来访问它们。
参考代码:
var class_instance = new Myclass(); 
// 取得第一个选项的值 
var class_option = class_instance.options.options_one; 
// 变量class_option现在的值就为"First Default Option"了

如果你想在类的内部访问这个选项,请使用this语句:
参考代码:
var Myclass = new Class({ 
Implements: Options, 
options: { 
option_one : "First Default Option", 
option_two : "Second Default Option" 
} 
test : function(){ 
// 注意我们使用this关键字来 
// 引用这个类 
alert(this.option_two); 
} 
}); 
var class_instance = new Myclass(); 
// 将弹出一个对话框,显示"Second Default Option" 
class_instance.test();

把这些东西组合成一个类,看起来就是这样的:
参考代码:
var Class_four = new Class({ 
Implements: Options, 
options: { 
option_one : "Default Value For First Option", 
option_two : "Default Value For Second Option", 
}, 
initialize: function(options){ 
this.setOptions(options); 
}, 
show_options : function(){ 
alert(this.options.option_one + "\n" + this.options.option_two); 
}, 
}); 
var run_demo_4 = function ){ 
var demo_4 = new Class_four({ 
option_one : "New Value" 
}); 
demo_4.show_options(); 
} 
var run_demo_5 = function(){ 
var demo_5 = new Class_four(); 
demo_5.show_options(); 
demo_5.setOptions({option_two : "New Value"}); 
demo_5.show_options(); 
} 
// 创建一个类class_four的实例 
// 并指定一个名叫new_option的新选项 
var run_demo_6 = function(){ 
var demo_6 = new Class_four({new_option : "This is a new option"}); 
demo_6.show_options(); 
}

代码及示例
熟悉PHP的人可能认识下面示例中的show_options方法中的print_r()函数:
参考代码:
show_options : function(){ 
alert(print_r(this.options, true)); 
}

这不是一个javascript的原生方法,只不过是从PHP2JS项目中Kevin van Zonneveld的一小段代码而已。对于那些不熟悉PHP的人,这个print_r()方法就给你了一个数组中键值对格式化后的字符串。在调试脚本的过程中,这是一个极其有用的debug工具,这个函数在后面提供的下载包中有详细的代码,我强烈推荐使用它来测试和研究。
参考代码:
var Class_five = new Class({ 
// 我们使用了选项 
Implements: Options, 
// 设置我们的默认选项 
options : { 
option_one : "DEFAULT_1", 
option_two : "DEFAULT_2", 
}, 
// 设置我们的初始化函数 
// 通过setOptions方法来设置选项 
initialize : function(options){ 
this.setOptions(options); 
}, 
// 用来打印选项数组信息的方法 
show_options : function(){ 
alert(print_r(this.options, true)); 
}, 
// 通过setOptions方法来交换两个选项的值 
swap_options : function(){ 
this.setOptions({ 
option_one : this.options.option_two, 
option_two : this.options.option_one 
}) 
} 
}); 
function demo_7(){ 
var demo_7 = new Class_five(); 
demo_7.show_options(); 
demo_7.setOptions({option_one : "New Value"}); 
demo_7.swap_options(); 
demo_7.show_options(); 
}

更多学习

下载一个包含你开始所需要的所有东西的zip包

    MooTools Class文档MooTools Class.extra文档print_r()参考
Javascript 相关文章推荐
List the Codec Files on a Computer
Jun 11 Javascript
node.js中的http.createClient方法使用说明
Dec 15 Javascript
jquery仅用6行代码实现滑动门效果
Sep 07 Javascript
jQuery Validation Plugin验证插件手动验证
Jan 26 Javascript
Javascript中的async awai的用法
May 17 Javascript
利用webstrom调试Vue.js单页面程序的方法教程
Jun 06 Javascript
浅析webpack 如何优雅的使用tree-shaking(摇树优化)
Aug 16 Javascript
如何抽象一个Vue公共组件
Oct 17 Javascript
详解Angular操作cookies方法
Jun 01 Javascript
通过seajs实现JavaScript的模块开发及按模块加载
Jun 06 Javascript
解决pycharm双击但是无法打开的情况
Oct 31 Javascript
关于uniApp editor微信滑动问题
Jan 15 Javascript
Mootools 1.2 手风琴(Accordion)教程
Sep 15 #Javascript
Mootools 1.2教程 排序类和方法简介
Sep 15 #Javascript
Mootools 1.2教程 滚动条(Slider)
Sep 15 #Javascript
Mootools 1.2教程 定时器和哈希简介
Sep 15 #Javascript
Mootools 1.2教程 正则表达式
Sep 15 #Javascript
MooTools 1.2中的Drag.Move来实现拖放
Sep 15 #Javascript
Mootools 1.2教程 Fx.Morph、Fx选项和Fx事件
Sep 15 #Javascript
You might like
BBS(php & mysql)完整版(三)
2006/10/09 PHP
对squid中refresh_pattern的一些理解和建议
2009/04/17 PHP
php调用方法mssql_fetch_row、mssql_fetch_array、mssql_fetch_assoc和mssql_fetch_objcect读取数据的区别
2012/08/08 PHP
PHP管理依赖(dependency)关系工具 Composer 安装与使用
2014/08/18 PHP
PHP通过curl获取接口URL的数据方法
2018/05/31 PHP
Yii框架函数简单用法分析
2019/09/09 PHP
laravel-admin 在列表页添加自定义按钮的例子
2019/09/30 PHP
jQuery Validation实例代码 让验证变得如此容易
2010/10/18 Javascript
基于jQuery实现的百度导航li拖放排列效果,即时更新数据库
2012/07/31 Javascript
Dom 学习总结以及实例的使用介绍
2013/04/24 Javascript
Javascript合并表格中具有相同内容单元格示例
2013/08/11 Javascript
javascript实现根据身份证号读取相关信息
2014/12/17 Javascript
JS处理json日期格式化问题
2015/10/01 Javascript
基于JS实现密码框(password)中显示文字提示功能代码
2016/05/27 Javascript
完美解决jQuery符号$与其他javascript 库、框架冲突的问题
2016/08/09 Javascript
微信小程序 保留小数(toFixed)详细介绍
2016/11/16 Javascript
为JQuery EasyUI 表单组件增加焦点切换功能的方法
2017/04/13 jQuery
完美解决手机浏览器顶部下拉出现网页源或刷新的问题
2017/11/30 Javascript
mui back 返回刷新页面的实例
2017/12/06 Javascript
Vuex中mutations与actions的区别详解
2018/03/01 Javascript
vue init webpack myproject构建项目 ip不能访问的解决方法
2018/03/20 Javascript
nodejs检测因特网是否断开的解决方案
2019/04/17 NodeJs
vue slot与传参实例代码讲解
2019/04/28 Javascript
JavaScript canvas绘制折线图
2020/02/18 Javascript
只有 20 行的 JavaScript 模板引擎实例详解
2020/05/11 Javascript
[05:34]2014DOTA2国际邀请赛中国区预选赛精彩TOPPLAY第二弹
2014/06/25 DOTA
Python安装第三方库的3种方法
2015/06/21 Python
使用Python判断质数(素数)的简单方法讲解
2016/05/05 Python
详解Django+Uwsgi+Nginx的生产环境部署
2018/06/25 Python
树莓派实现移动拍照
2019/06/22 Python
Python爬虫使用bs4方法实现数据解析
2020/08/25 Python
html5 横向滑动导航栏的方法示例
2020/05/08 HTML / CSS
华山导游词
2015/02/03 职场文书
创业项目大全(适合在家创业的项目)
2019/08/15 职场文书
《岳阳楼记》原文、译文赏析
2019/09/10 职场文书
科普 | 业余无线电知识-波段篇
2022/02/18 无线电