- 浏览: 147398 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
zhouweideshijie:
为什么在join的时候需要(select distinct t ...
mysql的exists与inner join 和 not exists与 left join 性能差别惊人 -
openxtiger:
太强了,一点都看不懂
看看谁聪明,类游戏寻找算法 -
metaphy:
无解. 定义n(A)为从A点发出的射线数, 若有解,则n(0, ...
看看谁聪明,类游戏寻找算法 -
ddccjjwwjj:
都不可以用 extjs5 具体用法怎么写
extjs 实现图片HTML5图片上传 -
openxtiger:
可以呀,但你做成连接池的时候,连接关闭时,只是还回给连接池,实 ...
mysql 必要的配置
最近闲来无事,写一个类似Java的语法的Javascript框架js5,欢迎大家指正:
已出第二版本:http://openxtiger.iteye.com/blog/1707172
主代码:
var Js5 = {version:"5.0.0"}; var __cpackage__; var __classes__ = {}; var __imports__ = []; Js5.apply = function(o, c) { if (o && c && typeof c == 'object') { for (var p in c) { o[p] = c[p]; } } return o; }; (function() { Js5.apply(Js5, { applyIf : function(o, c) { if (o) { for (var p in c) { if (!Js5.isDefined(o[p])) { o[p] = c[p]; } } } return o; }, extend : function() { var oc = Object.prototype.constructor; return function(sb, sp, overrides) { var coverrides = overrides; if (!overrides) { coverrides = sp; sp = sb; } var F = function() { },sbp,spp = sp.prototype; F.prototype = spp; coverrides = coverrides(spp) || {}; if (!overrides) { sb = coverrides.constructor != oc ? coverrides.constructor : function() { sp.apply(this, arguments); }; } sbp = sb.prototype = new F(); sbp.constructor = sb; //sb.superclass = spp; if (spp.constructor == oc) { spp.constructor = sp; } /*sbp.superclass = (function() { return spp; });*/ Js5.override(sb, coverrides); // extend coverrides return sb; } }(), override: function(origclass, overrides) { if (overrides) { var p = origclass.prototype; Js5.apply(p, overrides); } }, /*override : function(origclass, overrides) { if (overrides) { var p = origclass.prototype; overrides = overrides(p.superclass); Js5.apply(p, overrides); if (Js5.isIE && overrides.hasOwnProperty('toString')) { p.toString = overrides.toString; } } },*/ isString : function(v) { return typeof v === 'string'; }, isBoolean : function(v) { return typeof v === 'boolean'; }, isElement : function(v) { return !!v && v.tagName; }, isDefined : function(v) { return typeof v !== 'undefined'; }, isObject : function(v) { return !!v && Object.prototype.toString.call(v) === '[object Object]'; }, isDate : function(v) { return toString.apply(v) === '[object Date]'; }, isPrimitive : function(v) { return Js5.isString(v) || Js5.isNumber(v) || Js5.isBoolean(v); }, isNumber : function(v) { return typeof v === 'number' && isFinite(v); }, isEmpty : function(v, allowBlank) { return v === null || v === undefined || ((Js5.isArray(v) && !v.length)) || (!allowBlank ? v === '' : false); }, isArray : function(v) { return toString.apply(v) === '[object Array]'; }, isIterable : function(v) { //check for array or arguments if (Js5.isArray(v) || v.callee) { return true; } //check for node list type if (/NodeList|HTMLCollection/.test(toString.call(v))) { return true; } //NodeList has an item and length property //IXMLDOMNodeList has nextNode method, needs to be checked first. return ((typeof v.nextNode != 'undefined' || v.item) && Js5.isNumber(v.length)); }, each : function(array, fn, scope) { if (Js5.isEmpty(array, true)) { return []; } if (!Js5.isIterable(array) || Js5.isPrimitive(array)) { array = [array]; } for (var i = 0, len = array.length; i < len; i++) { if (fn.call(scope || array[i], array[i], i, array) === false) { return i; } } return []; }, namespace : function() { var o, d; Js5.each(arguments, function(v) { d = v.split("."); o = window[d[0]] = window[d[0]] || {}; Js5.each(d.slice(1), function(v2) { o = o[v2] = o[v2] || {}; }); }); return o; }, nameclass:function(c) { if (__classes__[c]) return __classes__[c]; var d = c.split("."); var o = window[d[0]] = window[d[0]] || {}; Js5.each(d.slice(1, d.length - 1), function(v2) { o = o[v2] = o[v2] || {}; }); return __classes__[c] = o[d[d.length - 1]]; }, importclass:function(c) { if (__classes__[c]) return __classes__[c]; var d = c.split("."); var o = window[d[0]] = window[d[0]] || {}; Js5.each(d.slice(1, d.length - 1), function(v2) { o = o[v2] = o[v2] || {}; }); o = __classes__[c] = o[d[d.length - 1]]; if (!o) { Js5.each(__imports__, function(i) { if ((o = i[d[d.length - 1]])) { return false; } }); } return o; } }); Js5.ns = Js5.namespace; })(); /** * p1:String ==>package name * p2..p-1,Object ==>imports * p-1,function ==> package body */ function jpackage() { var l = arguments.length,i = 0; if (l == 0) return; var pkf = arguments[l - 1]; if (Js5.isString(arguments[0])) { __cpackage__ = Js5.namespace(arguments[0]); i = 1; } else { __cpackage__ = window; i = 0; } var args = [],vs,ip; Js5.each(Array.prototype.slice.call(arguments, i, l - 1), function(v) { if (Js5.isString(v)) { vs = v.split(";"); Js5.each(vs, function(v2) { if (v2.substr(-2) == ".*") { ip = Js5.namespace(v2.substring(0, v2.length - 2)); __imports__.push(ip); args.push(ip); } else { args.push(Js5.importclass(v2)); } }); } else { args.push(v); } }); pkf.apply(__cpackage__, args); __cpackage__ = null; __imports__ = []; } /** * p1:String ==>class name * p2,String ==>same package;Object * p3,function ==> */ function jclass() { var l = arguments.length,i = 0; if (l < 2) return; var clf = arguments[l - 1]; var c; if (Js5.isString(arguments[0])) { c = __cpackage__; } else { c = window; } var p; if (l == 3) { var name = arguments[1]; if (Js5.isString(name)) { p = __cpackage__[name]; if (!p) { p = Js5.importclass(name); } } else { p = arguments[1]; } } else { p = Object; } if (!p) { throw new Error("[jclass] unrecognized parent class"); } c[arguments[0]] = Js5.extend(p, clf); } function jnew() { var l = arguments.length,i = 0; if (l == 0) return {}; var args = Array.prototype.slice.call(arguments, 1); var name = arguments[0]; var cls; if (Js5.isString(name)) { if (__cpackage__ && __cpackage__[name]) { cls = __cpackage__[name]; } if (!cls) { cls = Js5.importclass(name); } if (!cls) { throw new Error("[jnew] unrecognized class"); } } else { cls = name; } /*var temp = function() { }; var constructor = cls.prototype.constructor; var instanceCls = function() { return constructor.apply(this, args); }; temp.prototype = cls.prototype; instanceCls.prototype = new temp(); instanceCls.prototype.constructor = instanceCls; return new instanceCls();*/ var obj = {}; Js5.override(obj, cls); obj.__proto__ = cls.prototype; cls.apply(obj, args); return obj; }
例子:
var jui = {}; jpackage("jui", function() { jclass("Component", function() { return { constructor:function(x) { console.log("Component:" + x); }, show:function() { console.log("Component"); } } }); jclass("Container", "Component", function(_supr) { return { constructor:function(x) { console.log("Container:" + x); _supr.constructor.call(this, x); } }; }); }); jpackage("jui", function() { jclass("Window", "Container", function(_supr) { return { show:function() { console.log("Window"); } } }); }); jpackage("jui.form", "jui.*", function() { jclass("TextField", "Component", function(_supr) { return { show:function() { console.log("TextField"); } } }); }); jpackage("jui.ex", "jui.Window;jui.*;jui.form.*", function(_W, j) { jclass("Window", "jui.Window", function(_supr) { return { /*constructor:function(x) { _supr.constructor.call(this, x); },*/ show:function() { console.log("Window Ex"); _supr.show(); } } }); var x = jnew("Window", "package jui.ex.Window"); x.show(); x = jnew(jui.Window, "jui.Window : new in package, use complete class path"); x.show(); x = new jui.Window("jui.Window : new in package, use complete class path"); x.show(); x = jnew("jui.Window", "jui.Window: new in package, use complete class path"); x.show(); x = new j["Window"]("jui.Window: new in package, use import jui.*"); x.show(); x = new _W("jui.Window: new in package, use import jui.Window"); x.show(); x = jnew("TextField", "jui.form.TextField new in package,use import jui.form.*"); x.show(); }); var x = jnew("jui.ex.Window", "global jui.ex.Window"); x.show();
评论
6 楼
openxtiger
2012-10-28
刚刚做了修改,让import,支持 .* 功能,这样就更像 Java了
5 楼
openxtiger
2012-10-28
有几个问题值得思考:
1.同一个包中的,类定义,类继承,类实例化,如何可以不采用包名?
2.在包中,是否可以import相关的类?
3.如何实现包中才能引用的类?
1.同一个包中的,类定义,类继承,类实例化,如何可以不采用包名?
2.在包中,是否可以import相关的类?
3.如何实现包中才能引用的类?
4 楼
openxtiger
2012-10-28
淫笑琪 写道
垃圾,就是拷贝extJs的源码还好意思说闲来无事写的新框架,你是闲来无事拷贝Ext的源码吧,这种JS水平还好意思在那炫耀呢
哈哈,一看这位兄弟对Extjs很熟悉,我只是模仿了java的package,class,new等关键字。Js5这个对象的确是从extjs引用过来,只是修改了 extend 为闭包继承。Jquery和extjs core也有很多相似之处,所以好的东西当然要借鉴。
3 楼
淫笑琪
2012-10-28
垃圾,就是拷贝extJs的源码还好意思说闲来无事写的新框架,你是闲来无事拷贝Ext的源码吧,这种JS水平还好意思在那炫耀呢
2 楼
openxtiger
2012-10-28
yingjianxuehun 写道
不错,楼主js实力很强悍。。
谢谢夸奖,我把原型链的继承方式、闭包全部融合进去,而且同一个包的类的命名空间是共享的,主要是通过全局变量“__cpackage__”实现。
1 楼
yingjianxuehun
2012-10-28
不错,楼主js实力很强悍。。
发表评论
-
J框架发布 http://openxtiger.github.io/j/
2013-06-22 23:14 937J框架发布了,模拟了Java的语法,让Javascript面 ... -
extjs TabPanel 多行标题
2013-04-09 22:51 1662extjs TabPanel 的标题只能单行,如果设置ena ... -
j语言----like Java v2
2012-11-20 15:03 929这个无比像Java语言: 'package jui' ... -
Javascript写的Java --- j语言
2012-11-18 10:41 2253这次真的把java的语法写成javascript了,看起来太熟 ... -
[原创]类似Java语法的Javascript框架js5,实现jpackage,jimport,jextends,jclass,jnew
2012-10-30 10:40 1371终于到java的关键字package,import,exten ... -
[原创]类似Java语法的Javascript框架js5(v2)
2012-10-29 11:14 928第二版本: 1.添加了 jimport 类似实现java的i ... -
[原创]javascript 天才的设计者 (持续更新)
2012-08-14 15:03 966Javascript对象创建过程: ... -
Javascript的replace的妙用
2012-07-31 09:39 956格式为: str.replace(substr_or_reg ... -
insertAdjacentHTML的应用
2012-07-29 23:41 1033insertAdjacentHTML方法:在指定的地方插 ... -
采有闭包、原型链实现Js的真正继承和封装
2012-07-29 10:40 4484Javascript对象创建过 ...
相关推荐
KeeperJS,目的以一种亲和Java语法习惯的方式,解决Javascript面向对象的不足,KeeperJS加入了对接口,抽象类的支持,使用起来类似Java习惯。同时进一步丰富Javascript类库,例如KeeperJS实现了Java类库java.util包...
完整版Java web开发教程PPT课件 Java开发进阶教程 第01章 JavaScript简介以及基本语法(共15页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第02章 Dom模型,控制客户端元素(共15页).pptx 完整版Java ...
JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮以及一些通用的面向对象方法。 Java数据库连接池 BoneCP BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接...
JAVA编写的吃豆子游戏,类似疯狂坦克一样,至少界面有点像。大家可以看截图。 Java从网络取得文件 1个目标文件 简单 Java从压缩包中提取文件 1个目标文件 简单 Java存储与读取对象 1个目标文件 如题 Java调色...
JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮以及一些通用的面向对象方法。 Java数据库连接池 BoneCP BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接...
JAVA编写的吃豆子游戏,类似疯狂坦克一样,至少界面有点像。大家可以看截图。 Java从网络取得文件 1个目标文件 简单 Java从压缩包中提取文件 1个目标文件 简单 Java存储与读取对象 1个目标文件 如题 Java调色...
主要文件类型包括321个JavaScript文件、182个Markdown文档、157个Java源文件、44个HTML文件、33个PNG图片文件、10个XML文件、7个SVG文件、5个CSS文件和2个YAML文件。该项目是一个Elasticsearch搜索引擎框架的ORM框架...
Java原理和使用,包括基本的语言、语法知识和API JSP+Servlet,Java Web开发的基础 这方面可以关注Java开发基础专题。 2>服务器: WebLogic的原理、使用和配置 Tomcat:轻量的JavaWeb容器,和WebLogic功能类似...
JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮以及一些通用的面向对象方法。 Java数据库连接池 BoneCP BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接...
JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮以及一些通用的面向对象方法。 Java数据库连接池 BoneCP BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接...
JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮以及一些通用的面向对象方法。 Java数据库连接池 BoneCP BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接...
JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮以及一些通用的面向对象方法。 Java数据库连接池 BoneCP BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接...
JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮以及一些通用的面向对象方法。 Java数据库连接池 BoneCP BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接...
JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮以及一些通用的面向对象方法。 Java数据库连接池 BoneCP BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接...
这些文件详细展示了如何使用JavaScript、Java、HTML和CSS构建一个Elasticsearch搜索引擎ORM框架,该框架提供索引全自动智能托管,与Mybatis-plus一致的API,屏蔽语言差异,开发者只需要会MySQL语法即可完成对Es的...
完整版Java web开发教程PPT课件 Java开发进阶教程 第01章 JavaScript简介以及基本语法(共15页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第02章 Dom模型,控制客户端元素(共15页).pptx 完整版Java ...
JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮以及一些通用的面向对象方法。 Java数据库连接池 BoneCP BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接...
JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮以及一些通用的面向对象方法。 Java数据库连接池 BoneCP BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接...
完整版Java web开发教程PPT课件 Java开发进阶教程 第01章 JavaScript简介以及基本语法(共15页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第02章 Dom模型,控制客户端元素(共15页).pptx 完整版Java ...
完整版Java web开发教程PPT课件 Java开发进阶教程 第01章 JavaScript简介以及基本语法(共15页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第02章 Dom模型,控制客户端元素(共15页).pptx 完整版Java ...