双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

诚邀java+javascript爱好者共同打造javascript类库

一個程序員 一個程序員 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
自从事web开发以来

一直想打造咱国人开放式的javascript类库。

愿意奉献自己的精华,乃是咱们开发者志同道合之处。

有道是:纳众家之所长,汇天下之精髓。

任何一个框架,起初是由一些心得、解决问题的代码片段,等等。

聚合在一起,逐渐强化与扩展,久而久之,形成一个强大的辅助性工具库。

直到使用工具库的人注意到了这点,并着手修订工具库,精减代码,

再加上更和合理的设计工具库,使得它上升为框架的级别,以供大家使用。

因此咱们致力于开发工作的同时,汇聚自己的心得、idea。

共同打造一个诸如jquery一样的框架。

当然不是真的要跟jquery一样,因为已经有了jquery。

但是,并不表示有了现成的jquery、ext...就能得到满足。

至少它们都不是咱国人的,而我的爱国之心对此很不满。

我想把方向定在javascript编写语法上。用java语法编写javascript。再在这个基础上做其他应用性开发。

更好的解释应该叫java in javascript。这有很好的一点,能让熟悉java但对javascript不擅长的人使用起来更为方便,处处尽显熟悉的身影,

这就必须要让javascript具备OOP概念,而不仅仅是基于OO的事件驱动,因此注重的是编码规则(非字符编码,是编写代码)。

至于javascript的弱类型,这是个硬伤,目前觉得除了用编码风格来约束它,没有更好的法子。

总之尽可能的要实现OOP的所有思想,因为这仅仅是个开始,只有先妥协了语言规则,方可基于该规则做其他的事情。

目前要实现的OOP语言规则:
1、要在javascript引入包的概念(package)
2、要在1的基础上导入包(improt)
3、要在2中引入类的概念
4、要在3的基础上引入继承的概念
5、要在4的基础上引入多态的概念
6.1、在5的基础上引入抽象类的概念(个人觉得可不实现,)
6.2、在5的基础上引入接口的概念
7、要在6的基础上实现接口间的继承
.
.
.
n、在以上全实现后,需要完成java.util包中的最常用接口和类,如Map、HashMap。
n+1、对Object原始类型的扩展
n+2、线程概念(又是个硬伤...)
n++...

但因为量的问题,java语言中在java语言结构的设计上基本全是接口+抽象类,因此不要一一实现。

目前已经完成了接口实现,6.1的抽象类暂时停工



直接来几个实例吧。

犹如在java中创建一个类:
package com.xxx.xxx; // 创建命名空间包结构

improt com.zzz.zzz.Z; // 导入所需的其他引用(包+类名)

Class Test{

private String j;
public int i;

Test(){}

Test(arg1, arg2){
super(arg1, arg2);

this.i = arg1 + arg2
}

public int getI(){
return this.i;
}

public String getJ(){
return this.j;
}
}

映射成javascript:
// 创建命名空间包结构
Fan.package('com.xxx.xxx');

// 导入所需引用,由于js位于客户端执行的特殊性,当从未加载过Z文件时,该操作会同步发出http请求js文件
Fan.improt('com.zzz.zzz.Z');

// 创建一个类,可变长度参数列表:
// 参数1:类名(完整类名),最后一个参数:类的实现。
// 当存在显示继承时(缺省继承Object),继承类只占参数2的位置;
// 从参数2 - 最后一个参数之间,全部属于实现接口的位置。
Fan.clazz('com.xxx.xxx.Test', function(arg1, arg2){
this.$super(arg1, arg2);

var j;

this.i = arg1 + arg2;

this.getI = function (){
return this.i;
}

this.getJ = function {
return j;
}

});

java中创建一个接口:
Interface ICreate {
public static final Stirng ABC_DEF = "abcdef";

public void doCreate();
public void doRemove();
}

javascript创建接口:
Fan.interface('ICreate', function(){
this.ABC_DEF = 'abcdef';

this.doCreate = Function;
this.doRemove = Function;
});

java中实现一个接口:
Class Test implemens ICreate {
Test(){
super();
}

public void doCreate(){
// 非抽象类,一定要实现接口中的方法
}

public void doRemove(){

}
}

javascript实现一个接口:
Fan.clazz('Test', 'ICreate', function(){
this.$super();
this.doCreate = function(){
// 一定要实现接口中的方法,否则在创建类时给出警告
}

this.doRemove = function(){
}
});

java中的继承:
Class Test extends SuperClass implemens ICreate {
Test(){
super();
}

public void doCreate(){
// 非抽象类,一定要实现接口中的方法
}

public void doRemove(){

}
}

javascript继承,依旧是单线继承:
Fan.clazz('Test', SuperClass, ICreate, function(){
this.$super(); // 永远加上这行,主动去调用父类构造器,目前没实现缺省自动调用super

this.doCreate = function(){
// 一定要实现接口中的方法,否则在创建类时给出警告
}

this.doRemove = function(){
// this.$super 父类对象句柄,父父类:this.$super.$super, 深层次继承时取得各层父类句柄用法以此类推
this.$super.doRemove();
}
});

以上部分已经实现,但其中有不尽人意的地方,随后讲。

Fan的命名是暂时,名为扇子的意思。扇子,乃是从古至今给予人极大帮助的工具,既可解暑又可驱蚊。

想起小时候...唰...回到15年前

天气很热,晚上我们都睡在屋子外面(乡下),又能数星星了

奶奶又在用这把大大的蒲扇给我扇风驱蚊(5-10岁都是跟奶奶睡)。

..再刷..回到现在,抱歉带你们穿越了...

天热的时候总是想起那把大蒲扇,故取名为Fan,因为现在很热。

以上Fan中关键字命名也只是暂定,比如调用父类构造器的$super,因为IE中super为关键字,不可用作其他。

为了尽量避免和关键字产生冲突,又要取名更符合java语法需要,很不情愿的加了个前缀$,本想用¥,或者¥,再或者¥...

Fan目前的体系结构(草稿):
Fan v1.3.7
Fan.ui 专门负责处理ui方面,如创建一个面板,new Fan.ui.Panel(cfg)
Fan.util 辅助类库集合,如:Fan.util.Map
Fan.net ajax部分
Fan.error 各种自定义异常
Fan.dom 专门复杂html处理,如查询、遍历...
Fan.event 专门负责ui上的事件处理
Fan.fn 离散函数集合
Fan.keys 存放各种配置,以及特殊性标志
Fan.browser 浏览器个各种操作,如:保存收藏、打印、新建窗口,关闭窗口等等..
...

已实现的:
语言规则已经实现到了接口继承,也就是第7步
Fan.util.Map
Fan.util.Logger
Fan.net.Ajax
Fan.fn
Fan.keys
Fan.browser 需扩展,目前只有浏览器的识别

历时1个月,部分内容早在工作中就已经完成(Ajax,Map,Logger)。

不尽人意的地方:
1、代码潦草,时常兴起敲了一大段无注释代码,很多地方存在关键性注释,日后补足
2、在实现多重接口上面,存在一个类型鉴别问题不得解决;类继承没有这一问题,因为类继承是单线。
问题:我想用obj instanceof Interface 来鉴别对象是否属于某接口的派生;
但是未能实现,唯有用蹩脚的做法:Fan.instance(obj, Interface);
看来还是js功底不行,待高人指教。

更多的扩展应用等着你来参与。

诚请诸位javascript爱好者,工作之余致力打造Fan,咱们都是官方。

Q:87688973

...全文

相关推荐

jsp网页制作常用代码

jsp网页制作,常用代码,主要是在jsp页面中实现的,其中有基本的功能和一些复杂功能。

yangjunoakley2010

国央企创新负责人如何通过平台实现科研成果的快速识别与转化?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

BIZKEEN

PotPlayer自用皮肤

自用 PotPlayer 皮肤,仅微调了字体大小与颜色,是按个人习惯调整,未做适配性调整。

独特的时光

2-shell及常用命令-续.pdf

2-shell及常用命令-续.pdf

tianjiee

【电力负荷预测】项目介绍 MATLAB实现基于BO-Transformer-LSTM贝叶斯优化算法(BO)优化Transformer-LSTM组合模型进行居民用户多步电力负荷预测(含模型描述及部分示例

内容概要:本文介绍了一个基于BO-Transformer-LSTM的组合模型,用于实现居民用户多步电力负荷预测的完整项目实例。该模型融合Transformer的全局注意力机制与LSTM的局部时序记忆能力,构建能够捕捉长时依赖与周期性特征的深度学习架构,并引入贝叶斯优化(BO)自动搜索最优超参数组合,提升预测精度与训练效率。项目涵盖从原始数据清洗、特征工程、滑动窗口样本构建、模型设计到超参数优化、反归一化及多步误差评估的全流程,强调时间顺序划分以防止信息泄露,并通过周期编码、外生变量融合等方式增强数据表达能力。文中提供了详细的MATLAB代码示例,包括数据预处理、网络搭建、贝叶斯优化配置和预测结果评估等关键步骤。 适合人群:具备一定机器学习和时间序列分析基础,熟悉MATLAB编程环境,从事电力系统预测、智能电网、负荷管理等相关领域的研究人员、工程师及研究生。 使用场景及目标:①应用于居民级或多用户聚合负荷的短期至中期多步预测(如未来24小时);②服务于配电系统运行调度、需求响应基线设定、家庭能源管理系统优化、分布式能源协调控制等实际工程场景;③为科研提供可复现的深度学习+贝叶斯优化的技术路线参考。 阅读建议:此资源以实际项目为导向,建议读者结合提供的代码逐步实现并调试模型,重点关注数据质量控制、时间特征编码、组合网络结构设计与贝叶斯优化稳定性之间的协同关系,在实践中深入理解多步预测中的误差累积机制与超参数敏感性问题。

nantangyuxi
评论 51
收藏 已收藏
分享
返回顶部
一個程序員
JavaScript 87,983 成员 224,680 内容