Javascript实体对象生成器

 弄了一上午 模拟以前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));

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

谢谢!

SVN管理Github代码配置

研究了一下Github,使用它原本的管理工具虽然界面简洁明了但是还是不太习惯这种操作方式,而且公司也不能直接上外网,需要代理来访问internet网,无奈看了半天帮助原来Github是可以用SVN来管理的,小激动了一下,设置好了SVN的代理准备开始尝试配置Github代码导入到SVN。话不多说 具体的配置方法见以下步骤。

· 建立新的Repository

clip_image0021[1]

·填写Repository基本信息

clip_image004

·初始化Repository并创建Readme说明文件

clip_image006

·填写Readme说明文件内容

clip_image008 Read more "SVN管理Github代码配置"

爱尔兰咖啡:思念此生无缘人

120820105344_8538.gif
爱尔兰咖啡的发明人是都柏林机场的酒保。因为横越大西洋的飞机常会在这个机场加油,旅客下飞机休息时很喜欢喝杯爱尔兰咖啡,所以它就随着飞航而传到世界各处。
这个酒保是为了一位美丽的空姐所调制的.
酒保在都柏林机场邂逅了这位女孩,可能是一见钟情吧,酒保非常喜欢空姐。他觉得她就像爱尔兰威士忌一样,浓香而醇美。可是她每次来到吧台,总是随着心情点着不同的咖啡,从未点过鸡尾酒。 Read more "爱尔兰咖啡:思念此生无缘人"

生成器模式(Builder)


function extend(subclass, superclass) {
var F = function () {
};
F.prototype = superclass.prototype;
subclass.prototype = new F();
subclass.prototype.constructor = subclass;
subclass.super = superclass.prototype;

if (superclass.prototype.constructor === Object.prototype.constructor) {
superclass.prototype.constructor = superclass;
}
}

function mixin(targetObj, obj, deep) {
if (Object.prototype.toString.call(obj) !== '[object Object]') {
return;
}
for (var i in obj) {
if (obj.hasOwnProperty(i)) {
if (deep === true) {
targetObj[i] = targetObj[i] || {};
mixin(targetObj[i], obj[i], deep);
} else {
targetObj[i] = obj[i];
}
}
}
}

<script></script>
生成器模式

定义:
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

本质:
分离整体构建算法和部件构造。
生成器模式的重心在于分离整体构建算法和部件构造,而分步骤构建对象不过是整体构建算法的一个简单实现,或者说是一个附带产物。

要实现同样的构建过程可以创建不同的表现,那么一个自然的思路就是先把构建过程独立出来,在生成器模式中把它称为指导者,由它来指导装配过程,但是不负责每步具体的实现。当然,光有指导者是不够的,必须要有能具体实现每步的对象,在生成器模式中称这些实现对象为生成器。
这样一来,指导者就是可以重用的构建过程,而生成器是可以被切换的具体实现。
Read more "生成器模式(Builder)"

匿名函数块级作用域以及在JQuery中的应用

最近经常回在群里面看到有些朋友问如下这样的js写法该如何理解的的问题,虽然可能对匿名函数有些理解,但是有时候看到JQuery源码或者其他JS库中同样的写法时,就有点不理解了,今天再次分享下这方面的知识点。

(function(){

})(JQuery);

对以上写法的理解:

上面的这种写法通常叫做“块级作用域”,块级作用域的好处就是可以将匿名方法内部的变量进行私有化,当程序运行结束之后便将一些变量自动销毁。第一个()号表示次函数为一个函数表达式,其中包含了一个匿名函数,后面的一个()则表示执行这个函数表达式中的匿名方法,而JQuery则作为这个匿名函数的一个参数。

Read more "匿名函数块级作用域以及在JQuery中的应用"

不错的javascript工厂案例(Abstract Factory)

文章来自:http://www.dofactory.com/javascript-abstract-factory-pattern.aspx

Definition

Provide an interface for creating families of related or dependent objects without specifying their concrete classes.

Frequency of use (in JavaScript):    high   medium

 

Summary

An Abstract Factory creates objects that are related by a common theme. In object-oriented programming a Factory is an object that creates other objects. An Abstract Factory has abstracted out a theme which is shared by the newly created objects.

Read more "不错的javascript工厂案例(Abstract Factory)"

积累和沉淀

积累和沉淀,这也是我去13年得到的最大的收获,想说的是无论是什么东西都需要积累和沉淀才能有展现自己强大的一面,就像油烟机上油渍的积累,做饭的人都知道积累数月的油渍是很难清除的除非用强效的清洁剂,自然界中琥珀的形成也是从低价值树脂到颇有价值的收藏品。知识,健康,财富也是一样,知识如果不积累就会被社会的各种“迷药”所迷惑。健康不积累就会让自己将来在病痛中饱受折磨,心理疾病也是如此。财富如果不积累会让自己的晚年生活还在忙碌中度过。很多人说理财 投资,但是我觉得最重要的还是理自己的人生。我从来都没有发财致富 光宗耀祖的觉悟,只希望自己这一生活的没那么多遗憾,就像我名字中的畅字一样 。

自己并不是一个很有文化的人,失败的学业让我失去了很多获取知识的机会,但我并不后悔,我的人生是我自己走出来的,很多道理也是自己领悟出来的。

jilei

控制力

flappy bird绝对是练大脑控制力的神作,最近正好在学习控制力方面的东西就拿这游戏来分析了一下自己的大脑,玩了100多盘总结得出有5种导致死亡的原因。第一分神,刚开始玩的气候大脑容易在5分左右的气候分神,似乎右脑主导了思想就很容易分神。经过控制练习之后最后在17分左右的气候比较容易分神。第二失控,在玩的过程中经常会出现失控的情况手突然连续按很多下 但是情况不多 经过多次感受失控时候大脑的反应 应该是左脑主导了思想 但是没办法控制。第三经常出现在游戏的开头前3分,大脑对上一局的死亡做总结,其实也是分神 但是是大脑主动的去思考,并且经常性的因为这个原因而死亡所以单独算一类,经过控制力的联系也大大的降低了这种死亡的情况发生。第四物理知识的是缺乏,经常因为下降的角度和飞起的角度碰到柱子,这是硬伤没办法。第五兴奋,在分数快接近最高值的时候整个大脑会很兴奋,心脏也会加快跳动,然后前额的大脑灰质层会失去控制,经过抑制练习也会对这种兴奋得到控制。所以个人觉得自己的左脑具有敏捷的反应能力但是缺乏思考或者说还没开发完全,右脑则具有思考能力但是比较迟钝。通过前额大脑灰质层综合来控制左脑和右脑会大大提高控制力和思考能力。
以上所述都是个人结合书里面所说得出的个人感受,不具有科学依据。