这次真的把java的语法写成javascript了,看起来太熟悉了。
先给个例子:
j('package j.unit', function() { /** * @class j.unit.Observable */ j('class Observable', function(jsuper) { return { constructor:function() { jsuper.constructor.call(this); } } }); }); j('package jui', function() { j('import j.unit.Observable;'); j('import j.unit.*;'); j('class Component', { constructor:function() { }, show:function() { console.log("good"); } }); j('class Container extends Component implements Observable', function(jsuper, ob) { return { constructor:function() { jsuper.constructor.call(this); ob.constructor.call(this); } } }); });
附上实现代码:
function j() { var def, code; def = arguments[0]; if (arguments.length == 2) { code = arguments[1]; } if (J.isArray(def)) { def = def.join(' '); } var defs = def.replace(/\s{1,}/g, ' ').split(/\s/); var l = defs.length; if (l % 2 != 0) { throw new Error("[jjava] def error"); } var args = []; for (var i = 0; i < l; i += 2) { switch (defs[i]) { case "package": return jpackage.call(this, defs[i + 1], code); case "import": return jimport.call(this, defs[i + 1]); case "class": args[0] = defs[i + 1]; break; case "extends": args[1] = defs[i + 1]; break; case "implements": args = args.concat(defs[i + 1].replace(/\s/).split(",")); break; } } args.push(code); return jclass.apply(this, args); }其中的 jpackage,jimport,jclass 请看 http://openxtiger.iteye.com/blog/1708715