【首发 -- javascript 框架:Fan v1.3.22 -- 夏天里的扇子】

一個程序員 2011-09-27 02:50:18
特点:让你用java编码方式,编写javascript。
已经实现了OOP的基本特征:封装、继承、多态。

关键字:
1、clazz 定义类:
犹如在java或C#中一样,包名 + 类名 + 实现体 <===> 完整类名 + 实现体。

Fan.package('com.aaa.bbb');//声明命名空间
Fan.clazz('com.aaa.bbb.Test', function(){
var _d;
// 构造方法,new Test()时,会自动调用构造方法来构造Test实例
this.Test = function(d){
this.$super();
_d = d;
};
this.show = function(){
return _d;
};
});

3、interface 定义接口:
接口定义规则:
(1)不允许出现逻辑代码
(2)所有方法成员全等于Function
(3)所有非Function均为静态属性成员
Fan.package('com.aaa.bbb');
Fan.interface('com.aaa.bbb.ICreate', function(){
this.INFO = 'create interface';
this.show1 = Function;
this.show2 = Function;
});

4、$super 指向父类对象及父类构造方法
Fan.package('com.aaa.bbb');
Fan.clazz('com.aaa.bbb.Test', function(){
var _d;
this.Test = function(d){
// 构造方法显示调用父类构造方法,必须放在首句
this.$super(d);
_d = d;
};
this.toString = function(){
// $super 指向真实的父类对象并调用其toString方法
return this.$super.toString() + _d;
};
});

5、类继承:
Fan.package('com.aaa.bbb');

/* 引入包中的类,当类从未被加载过,则该操作会发ajax从server端拉取js文件
* improt第二参数可指定是否公开Test类,默认true
*/
Fan.improt('com.aaa.bbb.Test');

// 被继承的类,写在子类的类名后面,当improt第二参数为false时,父类需要写完整类名:com.aaa.bbb.Test, 缺省时继承Object
Fan.clazz('com.aaa.bbb.DemoTest', Test, function(){
var _name;
this.DemoTest = function(name){
// 构造方法显示调用父类构造方法,必须放在首句
this.$super(123);
_name = name;
};

this.getName = function(){
return _name
};
});

6、接口继承:多重继承
Fan.package('com.aaa.bbb');
Fan.improt('com.aaa.bbb.ICreateA');
Fan.improt('com.aaa.bbb.ICreateB');
// 参数起始位置2 至 倒数第二个位置,属于可变长度,传多个接口,或者一个接口数组
Fan.interface('com.aaa.bbb.ICreateC', ICreateA, ICreateB, function(){
this.INFO = 'Fan.test.IC';
this.showC = Function;
});

Fan.interface('com.aaa.bbb.ICreateC', [ICreateA, ICreateB], function(){
this.INFO = 'Fan.test.IC';
this.showC = Function;
});


7、实现接口:
//实现类需要实现接口中所有方法,否则将会得到警告,调用未实现的方法将得到异常
Fan.package('com.test');
Fan.improt('com.aaa.bbb.Test');
Fan.improt('com.aaa.bbb.ICreateA');
Fan.improt('com.aaa.bbb.ICreateB');
Fan.clazz('com.test.TestA', Test, ICreateA, ICreateB, function(){
this.a = null;

this.TestA = function(cfg){
this.$super(cfg);
this.a = cfg.a || 'Test.a';
};

this.showA = function(){
return this.a;
};
});

8、派生对象类型鉴别
var sub = new TestA();
sub instanceof TestA // true
sub instanceof sub.getClass() // true
sub instanceof Test // true
sub instanceof sub.getClass().superClass // true
sub instanceof Object // true
sub instanceof sub.$super.getClass() // true
sub.$super instanceof Test // true
sub.$super instanceof sub.getClass().superClass // true
sub.getClass().superClass === sub.$super.getClass() // true
sub.$super.$super instanceof Object // true

9、OOP辅助函数:
Fan命名空间下:
isClass、isInterface、isPackage、isPrivatePackage、instance(接口派生对象专用鉴别方法)、improt、deferImprot ...

10、扩展类库:
Fan.net.Ajax
Fan.util.Map
Fan.util.Logger
Fan.util.Cached
Fan.cmd.Command
Fan.cmd.CommandListener
Fan.cmd.KeyPressListener
Fan.cmd.MouseListener
Fan.Element/Fan.Elements
Fan.Browser
...

11、选择器,支持部分CSS选择器
样例:
Fan('#id');
Fan('.class');
Fan('div');
Fan('.test[name^=div1]');
Fan('div[name$=1]');
Fan('.test div[anme!=div1]');
Fan('div > span[name~=div1]');
Fan('div > span > div > table > tbody > tr > td > div');
Fan('.test span > div table td > div[name=innerDiv1]');

Fan v1.3.22 API:
临时:
http://diky87688973.gicp.net:8080/fan/fan_v1.3.22/doc/index.html

Fan API将持续更新...

...全文
182 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Acesidonu 2011-09-30
  • 打赏
  • 举报
回复
看来很不错啊。
一個程序員 2011-09-29
  • 打赏
  • 举报
回复
已更新至:1.3.25
修改bug若干,新增应用Poll类,长连接请求,以配合后台push应用。
打字员 2011-09-27
  • 打赏
  • 举报
回复
顶一个,有时间借鉴一下。。。
一個程序員 2011-09-27
  • 打赏
  • 举报
回复
纳众家之所长,汇天下之精髓。

恳求建议、批评、指教。

87,923

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧