日期:2014-05-16  浏览次数:20370 次

发布下一代的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机制来解决类库的多版本同时加载与使用的