Javascript实体对象生成器

Photo by AltumCode on Unsplash

Javascript实体对象生成器

·

2 min read

弄了一上午 模拟以前C#写了一个Javascript的对象生成器,支持对象转JSON集合,还有单属性访问器。没事技术含量为了熟悉原型以及原型链做的练习。

//申明扩展类
var ExtendClass = function () { };

//属性访问器
ExtendClass.prototype.accessor = function () {
    this.get = function () {
        return this.val;
    }
    this.set = function (val) {
        if (arguments.length == 2) {
            if (arguments\[1\] instanceof Function) {
                arguments\[1\](val);
            }
            val = arguments\[0\];
        }
        this.val = val;
    }
}
//值正确性校验
ExtendClass.prototype.isCorrectValue = function (val) {
    var flag = true;
    if (val instanceof Object && val instanceof Function && val == undefined && isNaN(isFinite)) {
        flag = false;
    }
    return flag;
}
//动态实体生成
ExtendClass.prototype.entityAccessor = function (entityList) {
    var entity = entityList;
    if (entity instanceof Object) {
        for (var i in entity) {
            var access = new extend.accessor();
            this.constructor.prototype\[i\] = access;
            var et = entity\[i\];
            var val = et\["value"\];
            if (extend.isCorrectValue(val)) {
                //判断是否存在附加函数
                if (et\["setVerify"\]) {
                    this.constructor.prototype\[i\].set.call(this.constructor.prototype\[i\], val, et\["setVerify"\])
                } else {
                    this.constructor.prototype\[i\].set(val);
                }
            }
        }
    }
}

//实体转换JSON输出
ExtendClass.prototype.getEntityList = function (entityObj) {
    var entList = entityObj;
    var tempArray = \[\];
    if (entList instanceof this.entityAccessor) {
        for (var en in entList) {
            tempArray.push(JSON.parse('\[{ "' + en + '": "' + entList\[en\].get() + '" }\]') \[0\]);
        }
    }
    return tempArray;
}

var setVer = function (val) {
    if (parseInt(val) < 0) {
        throw Error(this.lineNumber + "not age number!");
    }
}
var entityList = {
    "name": { value: "topaz.tang" },
    "age": { value: 25, get: true, setVerify: setVer },
    "sex": { value: "Men", get: true },
    "birthday": { value: "1988-11-10" }
}

var extend = new ExtendClass();

var entityFn = new extend.entityAccessor(entityList); //实例化实体生成器 参数1:实体JSON列表
console.log(entityFn.age.get()) //输出 set函数设置的值.
var allEntity = extend.getEntityList(entityFn); //输出 \[{key:value},{key:value},{key:value}...n\]
console.log(JSON.stringify(allEntity));

祝大家快乐工作,快乐生活。

谢谢!