Javascript OOP framework for Node.js and Browser, React Native. Simple MVVM model in data and view module.


Keywords
JavaScript, OOP, Node.js, MVVM, Model, Class, Framework
License
MIT
Install
npm install zeanium@2.0.1

Documentation

Zeanium

英文中文文档

介绍

Zeanium是完全面向对象的JavaScript底层框架, 它基于JavaScript语言本身封装, 没有任何前端、后端、第三方库限制, 只要能运行JavaScript的地方就可以运行zeanium核心底层库。你可以自由的使用面向对象的继承、封装、多态等等特性随意定义自己的类和模块。一次编写可以在前端、后端都可以运行。

相关产品

  • zeanium-node: zeanium-node是基于zeanium, 是专门为nodejs开发的后端框架,提供了基础的cacheclidatabaseionetparsersessiontemplate
  • zeanium-react-web: 基于zeanium和react同时支持web和wap端的前端UI框架
  • zeanium-react-native: 基于zeanium和react native的Android/ios应用原生开发框架

官方QQ群: 627104335

有任务问题可以添加qq群进行咨询

顶级内置API接口

  • zn.idle(): 空函数
  • zn.idleArray(): 返回空数组
  • zn.idleObject(): 返回空对象
  • zn.format(string, argv...): 格式化字符串, 可以是多个参数, 也可以是一个数组参数, 字符串里面用{xx}类似作为占位符, 根据参数索引序列一次替换, 并返回替换好之后的最新字符串。

比如以下代码:

```javascript
1. zn.format('hello {0}, you are {1} year.', 'yangyxu', '2017');
2. zn.format('hello {0}, you are {1} year.', ['yangyxu', '2017']);
```
第一行代码和第二行代码效果是一样的. 输出都是 "hello yangyxu, you are 2017 year."
  • zn.uuid(): 返回一个uuid字符串值
  • zn.serializeJSON(jsonObject): 序列化json数据
  • zn.fix(target, argv...): 根据argv补齐target的属性集
  • zn.extend(target, argv...): 根据argv只扩展target的属性集
  • zn.overwrite(target, argv...): 根据argv值重写target的属性集
  • zn.path(target, path, value): 设置或获取对象target属性路径path下的值
  • zn.invoke(target, path, args): 执行对象target路径path下的方法, argv作为输入参数
  • zn.deepEachObject(data, handler, context): 深度遍历data对象, handler是遍历函数, context是每次遍历的作用域, 并返回一个新的对象;
  • zn.arrayValueToObject(data, handler, context): 遍历数组并返回一个对象
  • zn.toString(value): 获取value toString的值
  • zn.each(target, callback, context): 遍历对象target, callback是遍历函数, context是callback的作用域
  • zn.clone(target): 克隆target对象
  • zn.type(target): 获取target类型
  • zn.is(target, type): 判断对象target的类型是否是type类型
  • zn.may(target, name): 判断对象target是否能执行"name"时间
  • zn.can(target, name): 判断对象target是否可以执行"name"事件
  • zn.has(target, name): 判断对象target是否有"name"属性
  • zn.get(target, name): 获取target对象属性为"name"的值
  • zn.set(target, name, value): 给target对象设置值
  • zn.gets(target): 获取target对象所有属性值
  • zn.sets(target, values): 给对象target 批量设置值

定义类

每个类都有 staticstaticsmixinspropertieseventsmethods 6个关键之;

  • static: truefalse, 默认值是false, 值为true时, 整个类是静态类, 不允许被实例化, 如果强制实例化, 系统会抛出TypeError错误。
  • statics: 定义类的静态属性和方法
  • mixins: 继承多类, 常规是继承是单向继承, 只有一个父类, 但是有些需求是需要继承多类的就可以使用mixins关键字, 如:mixins: [User, Person]
  • properties: 定义类的属性集, 是一个json对象
  • events: 定义类的事件集, 是一个数组对象 配合对象的on/off使用
  • methods: 定义类的方法集, 是对象类型。init 是每个类唯一指定的构造函数, 每次实例化对象是,如果有init函数则一定会调用。

定义 人 类

var Person = zn.Class({
    static: false,              //默认值是false, 如果是true, 定义类的时候就会执行 init 构造函数
    statics: {
        count: 1                //定义静态属性,
        getCount: function (){  //定义静态方法,
            return this._count;
        }
    },
    properties: {
        name: '',                   //定义属性名“name”的属性
        age: {
            value: 10,              //value: 属性默认值
            get: function (value){  //get: 定义属性get方法
                this._age = value; (1)
                //zeanium定义类属性时会自动定义“_”+属性名 的内部变量,后续所有操作都是基于内部变量
            },
            set: function (){       //定义属性set方法
                return this._age;
            }
        }
    },
    methods: {
        init: function (name, age){ (2)
            //If you new Person Class instance, init method will be call
            console.log("I'm constructor function.");
            this.name = name;
            this.age = age;
            //!important: This code will call 'age' set function
        },
        say: function (){ (3)
            console.log('person hello ', this.name);
            return 'person hello ' + this.name;
        }
    }
});

var _count = Person.getCount();
console.log(_count); //print: 1

var person1 = new Person('yangyxu', 20);
person1.name = "xu";    //<1>
person1.set(name, "xu");//<2>
//<1> is the same with <2>
  1. define any property, the system will generate the _ + property_name property.
  2. init is default constructor function, the name is fixed. Call new Person(), init constructor function will be called;
  3. define say customize method.

定义学生类 学生是继承人类

var Student = zn.Class(Person, { //inherit Person, the Student Super is Person
    properties: {
        grade: {
            value: 10,          //define `age` default value
            get: function (value){ //define `age` get method
                this._grade = value; (1)
            },
            set: function (){   //define `age` set method
                return this._grade;
            }
        }
    },
    methods: {
        init: function (name, age, grade){ (2)
            this.super(name, age); //It will call super Class Person init method
            this.sets({
                name: name,
                age: age,
                grade: grade
            });
            //
        },
        say: function (){ (3)
            this.super(name, age); //It will call super Class Person say method
            console.log('student hello ', this.name);
            return 'student hello ' + this.name;
        }
    }
});

var _yangyxu = new Student('yangyxu', 20, 'g1');
_yangyxu.say();
//print:
//person hello yangyxu
//student hello yangyxu

定义Teacher类

var Teacher = zn.Class(Person, { //inherit Person, the Student Super is Person
    properties: {
        id: ''
    },
    methods: {
        init: {
            auto: true,  // the attr is the same with this.super();
            value: function (argv){ (2)
                this.sets(argv);
            }
        },
        teach: function (){
            return 'teacher name: ' + this.name;
        }
    }
});

var _yangyxu = new Teacher('t1', 20);
_yangyxu.teach();

定义模块

使用AMD方式定义模块

定义模块

zn.define([
    'node:http'  //If module is node module, you have to add "node:" prefix
], function (node_http){ //If load finished, you can use the module.

    return zn.Class({
        properties: {

        },
        methods: {

        }
    });

});

文档

http://www.zeanium.com

License

MIT