发布下一代的JS类体系规范(草案):Javascript Class Specification,欢迎架构师级的Js/Java Fans参与讨论。
该规范的目标是取代目前流行的CommonJS或RequireJS。构建下一代真正完全面向对象的类体系。
该规范的第一个参考实现是JSDK1.0: https://github.com/fch415/jtdk
该规范仍在不断演进中,欢迎资深开发者提出改进建议!
该规范的全文(中文版):https://github.com/fch415/jss/blob/master/%231/jss%231_jcs_cn.md
下面是该规范的部分内容:
类的命名 完整的类名 应该 如下:
projectName/[packgeName/]SimpleName.js
项目名可以全大写或全小写,包名 应该 全小写,类名的首字母 应该 大写。
类的方法名或变量名 应该 遵循Camel命名法。常量名 应该 全大写。
私有方法名或静态量名应该在首字母前加下划线。
类的路径 在开发期,每一个类 应该 保存为一个文件:
projectDir/[packgeName/]SimpleName.js
类系统 应该 使用如下代码来定义类路径:
JS.setPath({
'JS': '../../source',
'my': './test/src',
'my.*': [
'my.CAT',
'my.Sleepable']
})
类的定义 每个类 必须 使用如下代码来定义:
JS.define("projectName.[{packageName.]SimpleName", {
singleton: true|false, //singleton or instance class
requires: [..], //need load classes before definition
extend: "", //only inherit one super class
mixins: [..], //allow inherit many classes's prototypes
constructor: function(){//class system must first execute super class constructor
...
},
config: {..}, //auto generate getter and setter methods
statics: {..}, //static fields and methods
"field_name": ..., //instance class's instance field or singleton class's static field
"method_name": function(){..} //instance class's instance method or singleton class's static method
})
"JS.Object" 必须 是所有类的根父类
类的加载 类文件可以直接同步方式加载,类文件还可以使用如下代码异步加载: javascript JS.setPath({ "projectName": "/projectDir" }); JS.imports(["projectName.[packageName.]SimpleName", ..], function(){ //console.log(this===JS.ClassLoader) //console.log(this.create("projectName.[packageName.]SimpleName", ..)) });
当未指名类加载器,类系统 应该 使用一个缺省的类加载器(JS.ClassLoader)异步加载所有类。
也允许自定义一个类加载加载某个package,如下:
javascript var loader = new JS.Loader({id:'loaderID',paths:{"projectName": "/projectDir"}}); JS.imports(["projectName.[packageName.]SimpleName", ..], function(){ //console.log(this===loader) //console.log(this.create("projectName.[packageName.]SimpleName", ..)) }, loader);
还有一种简写法:
JS.imports(["projectName.[packageName.]SimpleName", ..], function(){
....
}, {"projectName": "/projectDir"});//auto generate a loader with a random id
自定义的类加载器 必须 是JS.Loader的实例,如不指定父加载器,则类系统自动指定JS.ClassLoader为其父加载器。
类加载器可以通过以下代码查找:
javascript var loader = JS.Loader.getLoader("loaderID");
多版本类库的加载类系统 应该 使用多ClassLoader机制来解决类库的多版本同时加载与使用的