文档章节

《javascript语言精粹》读书笔记(三)

倪闯
 倪闯
发布于 2015/03/13 16:44
字数 1384
阅读 373
收藏 13

    从现在起要加快点速度了,书中其实有很多知识对于我来说已经很熟悉了,在此我就简单摘录一下,当然如果非常重要的知识(我认为的,可能有失偏颇),我会写的详细点,可能还会加入我的理解。下面继续:


第五章 继承

    继承是大多数编程语言非常重要的主题。良好的继承不仅可以使你的系统有逻辑性和层次感,更重要的是可以减少你的代码量和开发成本。

    5.1伪类

        在本节中作者试图隐藏prototype对象,而尽量使用一种类似“类”的方式实现继承,他的做法如下:

Function.prototype.method=function(name,func){
    if(!this.prototype[name]){
        this.prototype[name]=func;
    }
    return this;
}
//通过method方法定义一个inherits方法,目的是隐藏prototype实现继承
Function.method('inherits',function(Parent){
    this.prototype=new Parent();
    return this;
});

/*以上是准备工作*/
var Mammal=function(name){
    this.name=name;
}

Mammal.prototype.get_name=function(){
    return this.name
}

Mammal.prototype.says=function(){
    return this.saying||'';
}
//继承来了,采用的是级联的样式编程,只有一条语句
var cat=function(name){
    this.name=name;
    this.saying='meow';
}.inherits(Mammal).    //继承Mammal
    method('get_name',function(){    //在cat的原型上添加方法
        return this.says()+' '+this.name+' '+this.says();
    });

    这种伪类的方式作者提出了几个缺点:

        1.没有私有环境,所有属性都是公开的。

        2.无法访问super(父类)的方法。    (这点不太理解,构造一个子类的对象不就可以访问了吗?)

        3.如果你在调用构造器时忘记使用new了,危害相当大!所以建议构造器函数用大写字母。

    5.2对象说明符

        就是说构造器在参数设定上,尽量用一个对象,这样能更好的表达出语义。如:

var myobject=maker(f,l,m);    //不好的方式
var myobject=maker({          //比较好的方式
    first:f,
    last:l,
    male:m
});

    5.3原型

        5.1讲的是javascript用“类”的方式实现继承,这一节介绍怎么用原型的方式继承。直接上代码:

//为Object对象增加一个方法,这个方法的作用实际上是实现了一次对对象的拷贝
if(typeof Object.beget!=='function'){
    Object.beget=function(o){
        var F=function(){};
        F.prototype=o;
        return new F();
    };
}

var myMammal={
    name:'xxx',
    get_name:function(){
        this.name;
    },
    says:function(){
        return this.saying||'';
    }
}

var myCat=Object.beget(myMammal);//重点来了,这句是实现了对myMammal对象的继承
myCat.name='mimi';
myCat.get_name=function(){
    return this.says()+" "+this.name;
}

    5.4函数化

        这里其实又介绍了一个设计模式--函数化模式,个人感觉跟模块模式差不多,都是在内部定义私有变量、私有方法,然后通过特权方法对外提供访问接口。看个例子:

var mammal=function(spec){
    var that={};
    that.get_name=function(){
        return spec.name;
    }
    that.says=function(){
        return spec.saying||'';
    }
}
var mymammal=mammal({name:'Herb'});

var cat=function(spec){
    spec.saying=spec.saying||'meow';
    var that=mammal(spec);//继承父类
    that.get_name=function(){
        return that.says+' '+spec.name;
    }
    return that;
}
var mycat=cat({name:'Joge'});

        若要访问父类的方法,本书作者提供了一种装逼的写法(个人感觉没什么必要)

Object.method('superior',function(name){
    var that=this,method=that[name];
    return function(){
        return method.apply(that,arguments);
    };
});
var coolcat=function(spec){
    var that=cat(spec),
        super_get_name=that.superior('get_name');    //调用父类方法get_name
    that.get_name=function(n){
        return 'like '+super_get_name()+' baby';
    }
    return that;
}
var mycoolcat=coolcat({name:'Bix'});
var name=mycoolcat.get_name();    //'like meow Bix meow baby'

    5.5部件(略)


第六章 数组

    数组其实没什么好说的,他在javascript中就是一个对象。不同的是数组继承自Array.prototype,而不是Object.prototype。而且数组拥有length属性和很多实用的方法。

    (1)删除数组可以用delete array[2],但这会在下标2的位置产生一个undefined值,长度不变。可以用array.splice(2,1)代替他。

    (2)数组和对象的使用时机:

                当属性名是小而连续的整数时,你应该使用数组。否则,使用对象。    

                检测一个对象是否为数组的方法:

var is_array=function(value){
    return value&&
        typeof value==='object'&&
        typeof value.length==='number'&&
        typeof value.splice==='function'&&
        !(value.propertyIsEnumerable('length'));    
}

第七章 正则表达式(略)

    个人认为不用硬背,记住一些基本,会用就行。


第八章 方法

    介绍了Object、Array、String、Number等类型的常用方法,在此就不一一列举了。


第九章 代码风格

    本章作者着重介绍了代码风格的重要性,尤其像javascript这种有很多缺陷的语言。好的代码风格可以增加程序的可读性,进而增强他正常运行的可能性,以及是否准备按照我们的意图去工作的可能性。它也决定了软件在其生命周期中是否能进行扩展性修改。好的代码风格包括适当空格、缩进、换行等。


第十章 优美的特性

    javascript优美的特性包括:

        (1)函数是头等对象:函数是有词法作用域的闭包。

        (2)基于原型继承的动态对象:对象是无类别的。我们可以通过普通的赋值给任何一个对象增加一个新成员元素。一个对象可以从另一个对象继承成员元素。

        (3)对象字面量和数组字面量:这对创建新的对象和数组来说是一种非常方便的表示法。javascript字面量是数据交换格式JSON的灵感之源。

    另外,作者对产品特性的解读非常精彩。在此截取一小段

        

                


    至此,本书正文部分已介绍完,剩下的就是附录了,下周继续。

© 著作权归作者所有

倪闯
粉丝 6
博文 9
码字总数 8133
作品 0
朝阳
程序员
私信 提问
JavaScript语言精粹学习笔记(一)

《JavaScript语言精粹》相比《JavaScript权威指南》而言,是一本太薄的书了。然而也许正因为小而精,所以难有权威指南那样阅读起来浅显易懂却又醍醐灌顶般的感觉,语言精粹还是略微感觉有些艰...

小微
2012/12/27
199
0
《javascript语言精粹》读书笔记(一)

第一章 精华 任何语言都有其精华的部分和鸡肋的部分,javascript也不例外,而且鸡肋的部分还很多。但javascript的流行却不受他的质量影响。javascript为何如此流行?因为他是web浏览器的语言...

倪闯
2015/03/11
344
3
javascript语言精粹 读书笔记

这是我目前度过最好的js方面的书,小而精,没有一句废话全是精华。想要全面理解javascript,这本书必读。 P6 避免使用 / /注释 建议使用// P17 对象字面量是一种方便指定新对象的表示方法。属...

lilugirl
2014/01/16
359
3
《javascript语言精粹》读书笔记(四)

本篇对这本书的附录进行摘要。 附录A:糟粕 A.1全局变量 全局变量是javascript所有糟糕特性中最糟糕的。 全局变量是在所有作用域中均可见的变量。如果某些全局变量碰巧和子程序中的变量名称相...

倪闯
2015/03/16
162
0
《javascript语言精粹》读书笔记(二)

第三章 对象 javascript的简单类型包括数字、字符串、布尔值、null值和undefined值,其他所有的值都是对象。 javascript包含一个原型链特性,允许对象继承另一对象的属性。正确的使用它能减少...

倪闯
2015/03/12
326
2

没有更多内容

加载失败,请刷新页面

加载更多

zookeeper - leader选举

让我们分析如何在ZooKeeper集合中选举leader节点。考虑一个集群中有N个节点。leader选举的过程如下: 所有节点创建具有相同路径 /app/leader_election/guid_ 的顺序、临时节点。 ZooKeeper集...

Canaan_
14分钟前
5
0
金九银十裸辞跳槽面试,却被面试官吊打

目前已经达到金九银十的阶段,相信有不少程序员蠢蠢欲动,开始出去试试水,想要跳槽涨薪了!有一个朋友就想改变现状,于是找了大量网上的面试题,强行记下之后,开始出去“试水”。 他试水之...

别打我会飞
18分钟前
4
0
Spring 官方出品应用监控度量指标门面类库Micrometer介绍

前言 上篇文章 Spring Boot 2.x 中的 Actuator 我们提到了在Spring Boot Actuator中的metirc指标。在Spring Boot 2.x中 官方引入了新的监控门面(facade)类库Micrometer。如果你对门面不是很清...

码农小胖哥
47分钟前
3
0
获取form对象

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"> <head> <......

前端老手
49分钟前
5
0
CSS-字体格式化

一、字体属性 1、自定字体的类型 font-family:黑体,华文彩云,宋体; 用逗号隔开多个字体类型 2、字体大小 font-size 取值:(1)以px为单位的数字 (2)以pt为单位的数字 (3)em/rem 3、...

wytao1995
52分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部