`
zhanghua_it
  • 浏览: 994 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
文章分类
社区版块
存档分类
最新评论

初学浅析Mootools—oo编程

阅读更多
Javascript曾是“世界上最被误解的语言”, 因为它担负太多的特性,包括糟糕的交互和失败的设计,但随着Ajax的到来,JavaScript“从最受误解的编程语言演变为最流行的语言”,这除了幸运之外,至少还说明它是一个不错的语言。随着web程序的不断发展,Javascript先后出现不少优秀的框架。如:Prototype、jQuery、Mootools、Dojo、Ext等(Ext面向于界面UI,个人认为不能算作javasript框架)。
Java的程序员,对oo是再熟悉不过了。但是在Javascript对此支持比较弱,或者说大家在使用时,只是想着怎么实现功能,很少关注这方面。Jquery是一个很优秀的框架,其选择器真是方便,写法精简。比较复杂的功能,用Javascript代码去实现也许需要N多行才能实现,但用Jquery几行就OK。曾让我感叹,原来有了Jquery写Javascript是如此easy。也许是因为写java很久了,总是想着Jquery要是OO了那是多么的完美。但Jquery对oo支持还是不够,代码看上去也不像Java。在这里向大家介绍一个很OO的Javascript框架—Mootools。
MooTools是一个简洁、模块化、跨浏览器、面向对象的JavaScript框架。它能够帮助你更快,更简单地编写可扩展和兼容性强的JavaScript代码。
Mootools选择器、Ajax、drag等工具方法在这边就不详术了。下面主要讲一下我们Mootools怎么OO的。从Hello World!开始吧。
<script type="text/javascript" language= "JavaScript">
//创建一个HelloWorld类,其内有方法sayHello
var HelloWorld = new Class({
sayHello:function(){
alert("Hello world!");
}
});
//new一个HelloWorld
var helloWorld =  new HelloWorld();
//调用方法sayHello
helloWorld.sayHello();
</script>
运行结果:

怎么样,看起来很像java吧。HellWorld在new时是不带参数的,下面介绍带参数的,仍然以HelloWorld为例。
<script type="text/javascript" language= "JavaScript">
//创建一个HelloWorld类,其内有方法sayHello
var HelloWorld = new Class({
//初始化函数,类似java的构造函数。在new时是带参数的。
initialize:function(userName){
this.userName = userName;
},
userName:null,
sayHello:function(){
alert(this.userName+" say:\"Hello world!\"");
}
});
//实例一个helloWorld
var helloWorld =  new HelloWorld("Jack");
//调用方法sayHello
helloWorld.sayHello();
</script>
运行结果:

看到这里,是不是觉得这代码很亲切、很优美。是的,javascript也能写OO,也能像java那样写的优美。不像以前写Javascript那样凌乱、没有章法。(也许长时间写java代码,觉得java代码更合理、更优美)
如果只是优美,功能不具备那就是金玉其外,败絮其中。下面介绍一下“私有”方法的定义。
<script type="text/javascript" language= "JavaScript">
//创建一个HelloWorld类,其内有方法sayHello
var HelloWorld = new Class({
//初始化函数,类似java的构造函数。在new时是带参数的。
initialize:function(userName){
this.userName = userName;
},
userName:null,
sayHello:function(){
//这里通过调用内部方法getUserName来获取userName
alert(this.getUserName()+" say:\"Hello world!\"");
},
getUserName:(function(){
return this.userName;
}).protect()
});
//实例一个helloWorld
var helloWorld =  new HelloWorld("Jack");
//调用方法sayHello
helloWorld.sayHello();
alert(typeof(helloWorld.getUserName));
alert(helloWorld.getUserName());
</script>
运行结果:



看到这些可知道,getUserName是一个方法,但是在执行alert(helloWorld.getUserName());却报错“The method “getUserName” cannot be called.”。
protect可以声明方法为类内部方法,只能在内部调用。
继承这个OO的基本特征我们看看mootools是怎么实现的。看起来很神秘哦^_^。

<script type="text/javascript" language= "JavaScript">
var Animal = new Class({
name:null,
age:null,
//初始化方法,类似java的构造函数
initialize:function(name,age){
this.name = name;
this.age = age;
},
getName:function(){
return this.name;
},
getAge:function(){
return this.age;
}
})
var Cat = new Class({
//实现继承
Implements:Animal,
//cat自己的方法。
fish:null,
initialize:function(name,age,fish){
this.name = name;
this.age = age;
this.fish = fish;
},
getFish:function(){
return this.fish;
}
})
var cat = new Cat("aa",20,"2 fish");
alert("cat{name:"+cat.getName()+",age:"+cat.getAge()+",fish:"+cat.getFish()+"}");
</script>
运行结果:
 
再看另外一种继承:
<script type="text/javascript" language= "JavaScript">
var Animal = new Class({
name:null,
age:null,
//初始化方法,类似java的构造函数
initialize:function(name,age){
this.name = name;
this.age = age;
},
getName:function(){
return this.name;
},
getAge:function(){
return this.age;
}
})
var Cat = new Class({
Extends:Animal,
fish:null,
initialize:function(name,age,fish){
//调用Animal的初始化函数,类似java中super()
this.parent(name,age);
this.fish = fish;
},
getFish:function(){
return this.fish;
}
})
var cat = new Cat("aa",20,"2 fish");
alert("cat{name:"+cat.getName()+",age:"+cat.getAge()+",fish:"+cat.getFish()+"}");
</script>


Implements 和Extends这边都好像实现了继承功能,两者除了this.parent这个之外是否还有其他差别呢。我们再看下面的例子:
<script type="text/javascript" language= "JavaScript">
var Animal = new Class({
name:null,
age:null,
//初始化方法,类似java的构造函数
initialize:function(name,age){
this.name = name;
this.age = age;
},
getName:function(){
return this.name;
},
getAge:function(){
return this.age;
}
});
var Swarm = new Class({
canSwarm:function(){
return true;
}
});
var Cat = new Class({
Implements:[Animal,Swarm],
fish:null,
initialize:function(name,age,fish){
//调用Animal的初始化函数,类似java中super()
this.name=name;
this.age=age;
this.fish = fish;
},
getFish:function(){
return this.fish;
},
getAge:function(){
return 100;
}
})
var cat = new Cat("aa",20,"2 fish");
alert("cat{name:"+cat.getName()+",age:"+cat.getAge()+",fish:"+cat.getFish()+",swarm:"+cat.canSwarm()+"}");
</script>

大家可以看到Implements可以包含多个,而Extends 只支持一个。
Extends

    1、(class) 将被新类继承的父类

新建的类将包含父类中的所有方法,并且每个方法都有一个parent属性,通过它可以调用父方法。
Implements

    1、(object) 如果传入的是一个对象, 则该对象的属性将被复制至新类中
    2、(class) 如果传入的是一个Class,则该Class的属性将将被复制至新类中
    3、(array) 如果传入的是一个数组(数组元素是对象或Class),则数组中的对象或Class的属性将将被复制至新类中。

Implements和Extends十分相似, 但Implements的同名属性会被子类覆盖(不像Extends可以通过parent仍可调用). 对需要在新类中实现一组默认属性(来自其他类)的情况下非常有用。

现在相信大家对mootools的oo思想大概了解了吧,javascript本身的一些特性不能完全像Java那样完善和优美。但是这已经相当进步了。代码看上去更简洁、美观。另外,mootools
引入了一个  Garbage 类, 来对页面元素进行一个统一的管理和回收(主要是回收)。可以更好的减少js(或浏览器)造成的内存泄露等问题。
0
0
分享到:
评论

相关推荐

    mootools

    1. **面向对象编程**:MooTools基于原型的面向对象模型,允许开发者创建可复用的类和对象,提高了代码的组织性和可维护性。它支持类的继承、私有属性和方法以及构造函数等概念。 2. **DOM操作**:MooTools提供了...

    mootools详细教程chm

    这个GIF文件可能是关于MooTools DOM操作的可视化教程,展示了一些基本的DOM操作过程,如元素选择、添加和删除等,对于初学者来说,动态图示通常比文字描述更容易理解。 4. **mootools1.4中文手册.pdf** 这份PDF...

    MooTools1.4中文PDF手册+MooTools-Core-1.5.1.js

    MooTools是一款强大的JavaScript库,它提供了一套优雅的面向对象的编程接口和实用的工具集,便于开发者创建高效、可维护的Web应用程序。MooTools 1.4中文PDF手册与MooTools-Core-1.5.1.js是学习和使用MooTools的核心...

    Mootools 1.2.1 API 文档

    Mootools是一款强大的JavaScript库,它为Web开发者提供了丰富的功能和高效的工具,使得在浏览器端进行复杂的JavaScript编程变得更加便捷。Mootools 1.2.1是该库的一个版本,其API文档对于理解和使用这个库至关重要。...

    JavaScript框架高级编程——应用Prototype、YUI、Ext JS、Dojo、MooTools

    JavaScript框架高级编程——应用Prototype、YUI、Ext JS、Dojo、MooTools JavaScript框架高级编程——应用Prototype、YUI、Ext JS、Dojo、MooTools

    MooTools.Essentials

    2. **类系统**:MooTools基于原型的类系统支持面向对象编程,使得创建可复用的自定义类变得简单。类可以通过继承、实现接口、添加静态方法和属性等方式进行扩展。 3. **DOM操作**:MooTools提供了便利的DOM操作API...

    MooTools2.1.4完整包(含有vsdoc包)

    MooTools是一个轻量级的JavaScript库,设计用于简化网页开发中的对象导向编程。这个压缩包包含的是MooTools的...无论你是初学者还是经验丰富的开发者,都可以通过这个包轻松地利用MooTools进行高效、优雅的前端开发。

    mootools 1.2 中文文档

    - **类与对象**:MooTools支持基于原型的面向对象编程,通过`Class`和`Object`构造器创建类和实例,允许继承和混合(mixin)。 - **链式调用**:MooTools的API设计使得大部分方法返回当前对象,方便进行链式调用,...

    mootools开发手册中文版

    1. **对象与类**:MooTools 使用原型继承来实现面向对象编程,提供了强大的类系统。开发者可以通过`extend`方法来扩展已有类,通过`implement`方法添加新方法或属性。此外,`Object`类是所有MooTools类的基础,提供...

    mootools tree and table

    在IT领域,JavaScript库MooTools是一个非常受欢迎的框架,用于增强网页的交互性和功能。MooTools提供了许多工具和组件,其中包括对于tree(树形结构)和table(表格)的处理,使得开发者能够轻松创建复杂的用户界面...

    mootools源码分析.rar

    总的来说,通过对MooTools源码的分析,我们可以学习到JavaScript的高级特性、面向对象编程、事件处理、DOM操作、动画制作以及跨浏览器兼容性等多方面的知识,这对提升我们的JavaScript开发技能大有裨益。

    MooTools 帮助文档 中文

    MooTools是一个简洁,模块化,面向对象的JavaScript框架。它能够帮助你更快,更简单地编写可扩展和兼容性强的JavaScript代码。Mootools从Prototype.js中汲取了许多有益的设计理念,语法也和其极其类似。但它提供的...

    mootools详细教程

    - MooTools的设计强调面向对象编程,`Element`类不仅提供操作DOM的方法,还允许对元素进行扩展,添加自定义的行为或属性。这使得代码更加模块化和可维护。 6. **兼容性和浏览器差异** - 为了跨浏览器兼容,...

    MooTools JS框架 v1.3.2

    MooTools是一个简洁,模块化,面向对象的开源JavaScript web...2.MooTools符合OO的思想,使代码更强壮,有力,有效。3.高效的组件机制,可以和flash进行完美的交互。4.对于DOM的扩展增强,使开发者更好的利用document

    Mootools v1.11 文档 pdf html Mootools v1.2.1 js

    9. **Class系统**:MooTools的Class机制支持面向对象编程,包括继承、封装和多态,使得JavaScript开发更加面向对象。 10. **浏览器兼容性**:MooTools致力于跨浏览器兼容,可以在大多数现代浏览器上运行良好,包括...

    Mootools UI 框架

    Mootools UI 框架是一个基于Mootools JavaScript库的用户界面开发框架,它为开发者提供了一系列强大的组件和接口,使得构建富互联网应用程序(RIA)变得更加便捷和高效。Mootools本身是一个轻量级、模块化的...

    mootools.js插件 1.4.5 core下载.zip

    比prototypejs更丰富、更强大的mootools.js插件 1.4.5 core下载。mootools.js可以生成较为复杂的、动态的网页交互效果,和jquery一样强大。。Mootools从Prototype.js中汲取了许多有益的设计理念,语法也和其极其类似...

Global site tag (gtag.js) - Google Analytics