为了方便开发,我编写了一个JavaScript框架,我暂且将其命名为vangle.js,其思想是基于面向对象的编程方法,能够模拟类和接口,实现继承等基本技术。其实,目前已经有大量的相关框架,但是基于面向对象的框架比较少,纵使有,就我所知,也仅仅只是实现了类的继承和类的编写形式,并没有完全模拟类的所以主要部分。虽然,框架并不一定要求是面向对象的,但是,我认为这种编程方法在开发较大项目时有着很大的优势。我编写的框架的灵感来自与mootools框架,但又有不同。
这里,我列出一些例子来展示如何利用该框架来开发类和接口。
类:
var Person = new Class({ initialize: function(name) { //必须实现构造方法 this.name = name; }, name: '', setName: function(name) { this.name = name; }, getName: function() { return this.name; } }); var person = new Person("bilipan"); alert(person.getName()); //输出'bilipan' person.setName("bili"); alert(person.getName()); //输出'bili' var Student = new Class({ initialize: function(name, school) { this.parent(name); //必须先实现父类的构造方法 this.school = school; }, extend: Person, school: '', getSchool: function() { return this.school; }, setSchool: function(school) { this.school = school; } }); var student = new Student('pan', 'szu'); student.setName('wu'); alert(student.getName()); //输出'wu' alert(student.parents.getName()); //输出'bilipan', 访问父类的方法 student.setSchool('qinghua university'); alert(student.getSchool()); //输出'qinghua university'
接口:
var List = new Interface(['add', 'remove', 'get']); var List2 = List.extend(['isEmpty', 'clear']); //多接口继承 var ArrayList = new Class({ initialize: function() {}, implement: [List2], //实现接口,可多个 //若接口中的方法没有全部实现,会报错 add: function() {...}, remove: function() {...}, get: function() {...}, isEmpty: function() {...}, clear: function() {...} }); var al = new ArrayList();
由于本人对javascript感兴趣,所有才试着编写框架,但是基础不够扎实,对其他框架的研究不够,所以必然存在很多的问题。比如该框架还没有命名空间,可能会引发命名冲突;还有一些地方没有判断;没有优化代码,总之问题还是比较多的,希望大家能够多多提意见和建议,把它完善一下。
本人已经将代码提交到google project hosting(http://code.google.com/p/vangle/)上,另外,我还在google groups建立了vangle.js组,希望大家有空逛逛。
本文已经附上该源代码。它只是一个核心文件,还没有进行扩展。