- 浏览: 1460117 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
luhouxiang:
写的很不错,学习了
Extjs 模块化动态加载js实践 -
kingkongtown:
如果想改成淘宝后台那样,可以在编辑器批量上传图片呢?
kissy editor 阶段体会 -
317966578:
兄弟我最近也在整jquery和caja 开放一些接口。在git ...
caja 原理 : 前端 -
liuweihug:
Javascript引擎单线程机制及setTimeout执行原 ...
setTimeout ,xhr,event 线程问题 -
辽主临轩:
怎么能让浏览器不进入 文档模式的quirks模式,进入标准的
浏览器模式与文本模式
VJO
简单来说是一套ebay (已经在java这条不归路走火入魔了) javascript 基础设施,通过一套javascript基础类库以及规定注释(自定义和JsDoc),在语法语义上实现了java编程模式的javascript程序 。
可以从java的角度看待javascript,也可以从javascript的角度看待java,互相增强。
java 中所有对象都是Object的实例,用VJO写的javascript中所有对象都是VjO Object的实例。
包括Object的一般方法:
hashcode()
对象的唯一表示
equals(object)
以值来判断对等
getClass()
该对象所属类别
toString()
class + class name ,例如 class x.y
模拟java语法例子:
package samples.simplejava.map; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; public class Foo { public static Map<String, String> m_testMap = null; public static List<String> m_testList = null; public Foo(){ m_testMap = new HashMap<String, String>(); m_testMap.put("Key1", "value1"); m_testMap.put("Key2", "value2"); m_testList = new ArrayList<String>(); m_testList.add("listValue1"); m_testList.add("listValue2"); } public static void main(String[] args) { new Foo(); bar(); } public static void bar(){ Iterator it = m_testMap.keySet().iterator(); System.out.println("Looping the Map in JavaScript"); while(it.hasNext()){ String str = (String)it.next(); System.out.println("Key : " + str +" & value : "+ m_testMap.get(str)); } System.out.println("Looping the List in JavaScript"); for(int i=0;i<m_testList.size();i++){ System.out.println("index : " + i + "& value : "+ m_testList.get(i)); } } }
vjo.ctype('samples.simplejava.map.Foo') //< public .needs(['vjo.java.util.Map','vjo.java.util.List', 'vjo.java.util.HashMap','vjo.java.util.ArrayList', 'vjo.java.util.Iterator','vjo.java.lang.System']) .props({ m_testMap:null, //< public Map<String,String> m_testMap m_testList:null, //< public List<String> m_testList //> public void main(String[] args) main:function(args){ new this(); this.bar(); }, //> public void bar() bar:function(){ var it=this.m_testMap.keySet().iterator(); this.vj$.System.out.println("Looping the Map in JavaScript"); while(it.hasNext()){ var str=it.next(); this.vj$.System.out.println("Key : "+str+" & value : "+this.m_testMap.get(str)); } this.vj$.System.out.println("Looping the List in JavaScript"); for (var i=0;i<this.m_testList.size();i++){ this.vj$.System.out.println("index : "+i+"& value : "+this.m_testList.get(i)); } } }) .protos({ //> public constructs() constructs:function(){ this.vj$.Foo.m_testMap=new this.vj$.HashMap(); this.vj$.Foo.m_testMap.put("Key1","value1"); this.vj$.Foo.m_testMap.put("Key2","value2"); this.vj$.Foo.m_testList=new this.vj$.ArrayList(); this.vj$.Foo.m_testList.add("listValue1"); this.vj$.Foo.m_testList.add("listValue2"); } }) .endType();
类与命名空间管理:
vjo.ctype('samples.Account') .props({ RATE: 2.45 }) .protos({ amount: 0, balance: 0, constructs: function(){} }) .endType(); //props : 类属性 //protos: 实例属性
导入类的命名空间:
import vjo.utils.X
vjo.needs("vjo.utils.X")
以后代码可以用 this.$vj.X 访问 X 类
定义接口:
interface Y{}
vjo.itype("<namespace>.Y")
定义枚举:
enum E{}
vjo.etype("<namespace>.E")
定义抽象类:(利用注释加以说明)
abstract class Z{}
//> abstract vjo.ctype("<namespace>.Z")
定义内部类
class X{}
X : vjo.ctype()
定义构造函数
D(){}
constructs: function(){}
重载函数(利用注释加以说明)
D(int arg){} D(String arg){}
//>public void constructs(int arg) //>public void constructs(String arg) constructs:function(arg){}
调用父类构造函数
super()
this.base()
调用父类方法
super.doIt()
this.base.doIt()
类继承
class X extends Y
vjo.ctype("<namespace>.X") .inherits("<namespace>.Y")
实现接口(仅表示语义,无实际运行意义)
class X implements Y
vjo.ctype("<namespace>.X") .satisfies("<namespace>.Y")
实现实例方法
void setName(String name)
.protos({ setName: function(String name) })
实现静态方法
static void setName(String name)
.props({ setName: function(String name) })
静态初始代码
static{...}
.inits(function(){...}
枚举常量:
public enum Days { MON,TUE,WED,THU,FRI,SAT,SUN }
vjo.etype('<namespace>.Days') .values('MON,TUE,WED,THU,FRI,SAT,SUN') MON instanceof Days == true
参数类型:(注释说明)
void setName(String name){}
//> void setName(String name) setName : function(name){}
方法访问控制:(注释说明)
public void setName(String name){}
//>public void setName(String name) setName : function(name){}
返回类型:(注释说明)
public X getIt(){}
//> public X getIt() getIt : function(){}
参数个数变长:(注释说明)
public X getIt(String... x)
//>public X getIt(String... x) getIt:function(x){}
局部变量类型:(注释说明)
int x = 10; String s = "hello"; final boolean ok = false;
var x = 10; //< int var s = 'hello'; //< String var ok = false; //< final boolean
优点:
实现了我初学javascript时梦想的java javascript大统一
缺点:
熟练javascript后再这样发觉不能随心所欲写javascript很不爽
发表评论
-
continuation, cps
2013-09-12 16:49 2791起 随着 nodejs 的兴起,异步编程成为一种潮流 ... -
using mustache with spring mvc
2011-06-16 20:30 4712spring 基本不用介绍了,是目前最好的 IOC 容器了 ... -
备忘:使用 intellij idea 进行远程调试
2011-05-03 18:56 33593以前都是很土得打 log ,发现一篇关于 java 调试器架构 ... -
前后端编码传递
2010-10-21 00:12 2048背景: 关于编码是 BS 的开发是个大问题,包 ... -
javabean与attribute
2010-07-15 21:02 2417以前很忽视 javabean , ... -
JAVA学习路线图
2010-06-20 23:24 0最近论坛上看到好几个朋友都在问,如何学习 Java的问题, ... -
linux下定位java应用
2010-06-09 02:48 1422场景: java 应用不同于其它程序,在ps查看时程 ... -
java中的协变
2010-05-27 23:17 3355一个一直有点模糊的概念,记录一下,协变是指一个类型随着它关联的 ... -
验证码图片生成
2010-04-29 22:15 0<%@ page contentType="i ... -
利用aop重构数据访问层
2010-02-24 20:57 2100由于一直以来小项目做的多,造成了轻后端重前端的恶果,结果后端现 ... -
struts2讲义
2009-11-07 11:53 0struts2讲义 -
xml transfer for beyond compare
2009-10-22 17:33 0xml transfer for beyond compare ... -
Digester 空白保留问题
2009-10-17 16:40 1972Digester 详细介绍 : apach ... -
Jsp - pageEncoding 解析
2009-09-29 22:28 2446pageEncoding 作为 Jsp page 指令 ... -
图解JVM在内存中申请对象及垃圾回收流程
2009-09-15 20:33 0http://longdick.ite ... -
javarebel
2009-09-11 22:23 0使用JavaRebel实现即时重载javaclass更改 ... -
mac java web开发配置备忘
2009-09-05 17:02 89基本上和linux配置差不多,mac 可算兼具 linux 命 ... -
10个让我去寻找比Java更好的语言的理由
2009-08-26 13:02 0别误会我. 在我的职业生涯中我写了无数的Java代码,我当 ... -
生僻用法:finally and return
2009-08-26 12:55 1497本质上还是 reference 与 primitive val ... -
事件人工详情整理Pattern
2009-08-09 16:13 0事件人工详情整理Pattern
相关推荐
施耐德Vjo6.2 HMI编辑软件以及Vjo1.1Basic HMI编辑软件百度网盘下载安装包适用于IPC 以及3520 等多型号触摸屏
VJO播放插件是一种专为增强视频播放体验而设计的软件组件,主要功能是扩展系统或浏览器的多媒体处理能力,使用户能够流畅地播放特定格式的视频内容。在信息技术领域,这种类型的插件通常用于填补操作系统或应用程序...
【Visualjockey (VJo) 社区插件开源项目详解】 Visualjockey(VJo)是一款专业的视频混音和视觉艺术创作软件,被广泛应用于DJ、音乐制作人和视觉艺术家之中。它允许用户实时操控视频流,创建出令人震撼的视听效果。...
这些直播课程旨在帮助学习者逐步掌握STM32的开发技能,从理论到实践,从基础到高级,全方位提升对嵌入式系统的理解和应用能力。更新的课程列表可能会包含新加入的课程主题、改进的教学方法或者最新的技术趋势,确保...
{ " device_name " : " " , " access_token " : " "}安装git clone git@github.com:vjo/bubblescope.git bubblescope && cd bubblescope 节点cd server/node && npm install bubblescope使用peristream项目,该项目...
趣味互动的模拟沙粒概述: 这些LED与运动相互作用,看起来像受到重力的影响。 一个Adafruit LED矩阵将LED显示为沙粒的小颗粒,通过采用Adafruit羽毛对加速计进行采样来...下载地址:https://a360.co/2AD3VJo 组件安装:
《Windows SDK 10.0.10586:深入了解开发工具与API》 Windows SDK(Software Development Kit)是微软提供的一套用于开发Windows应用程序的综合工具集,它包含了编程人员所需的各种文档、库、头文件、示例代码以及...
AVPro Video是Unity引擎中的一款强大视频处理插件,核心在于提供高效、高质量的视频播放功能,支持多种视频格式,并且具有丰富的视频处理和优化工具。"Core Edition 2.1.0" 是该插件的一个特定版本,意味着它包含了...