该规范的目标是取代目前流行的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机制来解决类库的多版本同时加载与使用的问题。 先定义两个Loader,分别加载"test"类库的两个版本:
JS.imports(['test.CAT'], function(){
var cat = this.create('test.CAT', ...);
}, {'test': '/v1/source'});
JS.imports(['test.CAT'], function(){
var cat = this.create('test.CAT', ...);
}, {'test': '/v2/source'});
类实例的创建
使用以下方式创建一个类实例,前提是类文件已经加载。
同步加载时
JS.create("projectName.[packageName.]SimpleName", ..) ;
异步加载时
JS.imports(["projectName.[packageName.]SimpleName", ..], function{
this.create("projectName.[packageName.]SimpleName", ..) ;
});