观《坂上之云》

作者:bibodeng 发布于:2014-3-9 10:44 Sunday 分类:生活点滴

昨天晚上看完了《坂上之云》这部长日剧,阮一峰老师也推荐过此剧,觉得拍的很好,深受启发,尤其是日本崛起的时代,它的国民如何积极进取,斗志昂扬。而这也更坚定中国热血青年今后复兴中华的决心,以及今后中国之发展,是否能够健康而高效。

弱肉残食,亘古不变之理。野猪野狗之于山野,食物链中层,食植物、羊兔,虎豹之于山野,食物链上层,则食野猪野狗,人之于山野,若不以智力想方设法,则未必敌过野猪野狗。然而如果像《荒野...

阅读全文>>

标签: 观后感 日剧 近代 崛起 中国

评论(0) 引用(0) 浏览(704)

假期小记

作者:bibodeng 发布于:2014-2-16 8:57 Sunday 分类:生活点滴

假期小记

by bibodeng 2014-02-12

我的假期即将结束了,一切都过得这么快,眨眼间,一个月的假期就说要结束了。短短的30天,做的最多的就是睡和吃了,一秤发现,两斤到手。

如此放松的假期中,陪父母的时间算比较多,因为除了出外聚会,走亲访友,都呆在家里。一家人围炉而坐,看着各种文艺汇演,聊聊家常,听母亲唠叨,然后低头看看双亲的手掌,又平添了几多皱纹。

...

阅读全文>>

标签: 生活 假期 书籍

评论(0) 引用(38) 浏览(4364)

linux下的幸福生活

作者:bibodeng 发布于:2014-1-25 17:59 Saturday 分类:linux

linux下的幸福生活

by bibodeng 2014-01-25

程序员在意什么?

linux,对于程序员来说,是一种生活方式。程序员最追求的是什么呢?我觉得有两点,一是速度,二是功能强大。这两个都是体验的重要组成,一个平台下的工具是否够速度,用起来爽,决定着我们的喜爱程度。毫无疑问linux是强大的平台,涌现着一大批的优秀软件。

我最喜欢的工具(们)...

阅读全文>>

标签: linux 效率 命令行

评论(0) 引用(0) 浏览(1958)

task命令行GTD工具用户手册

作者:bibodeng 发布于:2014-1-25 17:57 Saturday 分类:linux

task命令行GTD工具用户手册

by bibodeng 2014-01-25

名字(NAME)

task - 一款命令行的todo任务管理软件

命令(SYNOPSIS)

task 过滤符 子命令 [<mods>|<args>]    //调用task子命令
task --version                      //可以获得...</args></mods><p class="readmore"><a href="http://www.bibodeng.com/?post=152">阅读全文&gt;&gt;</a></p>

标签: linux task 效率 命令行

评论(0) 引用(0) 浏览(2233)

做自己的英雄——读《DOOM启示录》

作者:bibodeng 发布于:2014-1-23 20:24 Thursday 分类:读书笔记

做自己的英雄

by bibodeng 2014-1-23

你来这个世界上是否做自己的英雄,还是在一直埋怨着家庭,社会给你的无奈。你是否追逐过你心里所谓的梦想,还是只是止步不前,任自己的懒惰把一切热情给消耗殆尽。

![john-carmack](http://www.bibodeng.com/content/plugins/kl_album/upload/201401...

阅读全文>>

标签: 编程 游戏 狂热 极客 热爱 卡马克 罗梅洛

评论(0) 引用(1) 浏览(4911)

归前小记——记微点创业实习

作者:bibodeng 发布于:2014-1-12 23:44 Sunday 分类:生活点滴

归前小记

by bibodeng 2014-1-12

今天是周日,晚上就不写代码了,放松一下。这么说好像我每天都花很多时间在编程一样,其实每天能够进入状态的就那么2-3个钟头,其它时间都在进入状态。

2013年12月27号过来广州雄洲这边,至今也有半个多月了,也算过了一把创业的瘾。来到微点这个小小的办公室,我第一次的印象是觉得还不错。毕竟是大学生创业,能够租起一件像模...

阅读全文>>

标签: 小记 实习 创业

评论(0) 引用(0) 浏览(1435)

精进的2013,希望的2014

作者:bibodeng 发布于:2014-1-3 1:08 Friday 分类:生活点滴

精进的2013,希望的2014

by bibodeng 2013-01-03

2013都干了些什么

稍稍回忆一下,2013都干了些什么,记得大三上学期,基本上还是在老实上课,课余写了个微信公众平台,当时思愿也在接触python。我偶尔带着电脑去学校的图书馆编程,2012年冬天买的笔记本,正处在蜜月期间,就带着它学习了python,写了些东西。但是后来思愿对于django啊...

阅读全文>>

标签: 大学 旅行 总结 计划

评论(0) 引用(2) 浏览(1571)

js设计模式基础——继承

作者:bibodeng 发布于:2013-12-4 23:59 Wednesday 分类:web开发

js设计模式基础——继承

by bibodeng 2013-12-04

js中的继承

js中的继承分为几种:

  • 类式继承 (构造函数的prototype链扩展) extend
  • 原型式继承 (从对象的角度) clone
  • 掺元类 (混合多个类)

类式继承

使用原型链的方式,让构造函数的原型指向另外一个对象(注意是对象)。我们平常做的比较多的,就是创建一个新类,然用用prototype扩展这个类,然后生成的类的对象实例则具备了原型链对象中的方法和属性了。

让一个类继承另外一个类的四部曲:

  • 设置原型对象
  • 恢复构造函数
  • 执行构造函数(构造函数也执行父类构造函数)
  • 生成新对象

然而在new的过程中,将会调用自身的构造函数,让一个类继承另外一个类,就需要它调用一次父类的构造函数,从而在this中声明各种属性。并且把构造函数设置回自己的构造函数(因为会覆盖掉)。现在为了实现两个类之间的继承,实现一个模拟继承:

function extend(subClass, superClass){
    var F = function() {};
    F.prototype = superClass.prototype; // 这句挺巧妙
    subClass.prototype = new F();   // 相当于调用过了superClass的构造函数,并且将F的对象实例赋给了subClass的prototype对象
    subClass.prototype.constructor = subClass; // 恢复构造函数
}

原型式继承

从原有对象的基础上进行修改变换。类的基础是一个对象:

var Person = {
    name: 'ren',
    talk: function(){
        console.log("hi, my name is "+this.name);
    }
}

// 克隆方法,将obj放到新对象的原型链中
function clone(obj){
    function F(){};
    F.prototype = obj;
    return new F;
}

// 原型继承
newObj = clone(Person);

在clone之后,对于从原型继承而来的属性,直接更改的话会改变原型对象中的数据,会对别的子类产生影响,而如果给一个属性赋值的方式,如obj.name = "bibo" 将会新建一个新对象自己的属性。所以,要改变某个属性之前,先为它创建新的副本,而不是让它默认使用原型的值,这也能够解决上面所谓的读写不对称 ,这多少和我们之前的继承认识有所不同。不过可以使用hasOwnProperty来区分是实际成员还是继承的成员,因为hasOwnProperty是不把原型链中的属性或方法算在内的。

多类继承(混合两个类)

使用的是将一个类中的属性拷贝到另外一个类中。这样就把两个类(一个函数)的属性给混在一起了。

function mix(receivingClass, givingClass){
    if(arguments[2])
    {
        // 可能不止一个类掺入,存起所有prototype
        for(var i=0, len = arguments.length; i < len; i++){
            receivingClass.prototype[arguments[i]] = givingClass.prototype[arguments[i]];
        }
    }
    else
    {
        for(methodName in givingClass.prototype){
            if(!receivingClass.prototype[methodName]){
                receivingClass.prototype[methodName] = givingClass.prototype[methodName];
            }
        }
    }
}

上面的函数用于掺杂多个类的prototype属性。一般是继承prototype对象里面的东西:

var ClassA = function(){};
ClassA.prototype = {
    // 这里的才是prototype对象中的属性和方法
    method1: function(){console.log("method 1 call")}
}

// 假设有另外一个类:

var ClassB = function(){};

mix(ClassB, ClassA); // 将method1给混到ClassB中去

大部分代码都是从书中摘抄的,这里只是稍微梳理一下各种代码。其实最根本的还是弄清原型链的关系。对于问题的敏锐性,是能够注意到事物之间的关联,理清关键联系,这样能够朝着目标解决问题。


end

阅读全文>>

标签: web js 继承

评论(0) 引用(2) 浏览(1746)

简析js设计模式接口基础

作者:bibodeng 发布于:2013-12-2 19:56 Monday 分类:web开发

简析js设计模式接口基础

by bibodeng 2013-12-02

想起要对js设计模式中一些基础的代码做一个简单分析,让自己印象更加深刻。例如接口,继承,闭包等等,方便以后要的时候直接拿来。

接口

接口,学过Java的同学肯定知道,声明一个接口,里面有若干方法,而一个类负责实现(implements)它,语言本身的机制会强制该类必须实现接口中声明的所有方法,否则就会报错。实现接口的目的是为了提供一组通用的叫法,让不同的对象实现它。很常见的就是在组合模式中,父元素和子元素都实现了相同的接口,从而可以很直接地将请求从任意一层传递下去。总之,接口能够提供一个通用的方法库,也要保证各类都有实现所有方法。接口在js中的实现方法有三种:

  • 注释法 (就是用注释来说明)
  • 属性检查法
  • duck type(会呱呱叫的都是鸭子)

属性检查法

注释法就不详细看了,因为它就是用注释声明一些接口,而不做任何检查,完全靠人工检查是否实现了相应的方法。而属性检查法,相对来讲严格一点,它将一组接口的名字都放入一个数组中。

// 这是后面组合模式表单的一个例子
var ClassA = function(){
    // 声称自己有一组接口
    this.interfaces = ['Composite', 'FormItem'];
}

为了检查是否实现了相应的接口,就检查该类的实例是否具有某个接口,这个某个接口是作为字符串传入需要检查的接口名。

// 模仿implements
function implements(obj){
    // 对传入的参数(接口名进行检查)
    for (var i=1; i < arguments.length; i++)
    {
        var interfaceName = arguments[i];
        var interfaceFound = false;
        // 检查声称的接口 比对两个数组需要两个循环
        for (var j=0; j<obj.interfaces.length; j++){
            if (obj.interfaces[j] == interfaceName){
                interfaceFound = true;  // 接口j找到了
                break;
            }
        }
        // 只要有一个接口没有实现
        if(!interfaceFound){
            throw {
                name: 'interface error',
                msg: 'some interfaces not found in obj'
            }
            return false;
        }
    }
    return true;    // 全部通过检查
}

// 调用方法
if (!implements(obj, 'Composite', 'FormItem')){
    ...
}

这次只是把这些接口名都放到一个数组中,但是还是没有确保在ClassA中实现接口中的方法(还是以注释的方式说明)。在实践中看起来也没啥用处。我们需要的是真正能够检查对象的方法,我们瞬间想到了for (var index in obj) 对每个方法进行检查。而我们的接口,也应该放在一个像这样的对象中,它能够维护接口的名字和各种方法名。

{
    interfaceName: 'Composite',
    methods: ['add', 'remove', 'getChild']
}

初步的思想是有了,但是实现要灵活,能够生成一个如上的对象。duck typing就是这样做的:

鸭式辨形

会呱呱叫的两只脚走路的会游泳的就是鸭子。我们生活中常常是一个经验主义者,通过这样的方法来判断事物。所有,理解起来也不是很难:

// 接口对象
var Composite = new Interface('Composite', ['add', 'remove', 'getChild']);

// 要得到上面的对象,我们写一个构造函数专门用来新建接口对象
function Interface(interfaceName, methods){
    this.interfaceName = interfaceName;
    this.methods = methods;
    // new操作将返回this
}

// 如果要严密一点,就需要检查参数的个数和类型

这次就不用注释了,而且代码很明了。声明了一个接口对象Composite,它的名字叫做Composite,具有addremovegetChild三个方法。那么如何声明实现了该接口,并且用什么来确保对象实现了我们接口声明的方法呢?

这次都不用声明实现了该接口,只要实现了相应的方法就是实现了该接口。所以不用显式地声明implements了什么。而是在某个方法之前用ensureImplements来检查。至于设计成Interface的内置方法,还是普通函数,都是可以的。

// obj, interf1, interf2
Interface.ensureImplements = function(obj){
    if (arguments.length < 2){
        throw new Error("arguments require for at least 2");
    }

    // 依次检查 这次的参数是interface实例,不再是字符串
    // 而一个字符串数组也变成了真正的对象的属性
    for (var i=1; i<arguments.length; i++){
        var interface = arguments[i];
        // 严格的类型检查
        if (interface.constructor !== Interface){
            throw new Error("argument " + i + " is not the instance of Interface Class");
        }

        for (var j=0; j<interface.methods.length; j++){
            var method = interface.methods[j];
            if (!obj[method] || typeof obj[method] !== 'function'){
                throw new Error("ensureImplements error: method" + interface.methods[j] +
                    ' in interface '+ interface.interfaceName + ' was not found.');
            }
        }
    }
}

// 调用示例
function foo(formObj){
    // 不满足条件回报错
    Interface.ensureImplements(formObj, Composite, FormItem);

    // 使用接口中的方法
    formObj.remove();
    ...
}

主要就是实现一个Interface类,供生成实例,也提供一个ensureImplement方法。只要引入了这个类,就可以使用new一个Interface,然后检查的方式严格要求类实现了接口中的方法。但是我总觉得少了一步,就是声明一下某个类实现了某个接口。当然也可以用数组将所实现的接口都存一个对应的应用,如{'Composite': Composite}。但是这样看起来就不像是鸭式辨型了。


end

阅读全文>>

标签: web js 接口 interface

评论(0) 引用(2) 浏览(1850)

[书]读《js设计模式》

作者:bibodeng 发布于:2013-11-29 11:17 Friday 分类:web开发

读《js设计模式》

by bibodeng 2013-11-29

迫切的需求

接触前端大概一年了,由于许多深入的东西都不懂,所以做不出高级的东西。对于稍微复杂一点的需求,都觉得难以下手。于是意识到了要学学设计模式了,所以就翻开(准确来说是点开了)这本《javascript设计模式》。由于有了js的基础,在读了《js编程精粹》之后,对于这门语言有了喜爱和习惯,于是这...

阅读全文>>

标签: web js 继承 笔记 设计模式

评论(0) 引用(1) 浏览(1675)

Powered by emlog 京ICP备16017775