最近在读JavaScript设计模式这本书,准备搞一个系列来记录所学所想,其实主要原因是方便以后查阅。

第一章主要介绍了JS函数的不同定义与使用方法,用自己的方法去模拟类也是它的独有魅力所在。

首先,由check函数展开,如果用不同的函数去对应功能,会造成过多的全局变量定义,例如

var checkName = function () {//验证姓名}

function checkName  () {//验证姓名}

这两种方式都会创建全局变量checkName,一来会造成不必要的浪费,其次如果别人定义了相同的方法会覆盖原来的功能,这种相互覆盖的问题是很不容易察觉的,所以最好的解决方法就是用对象收编变量。

对象收编变量

var CheckObject = function () {
return {
checkName: function () {
//验证姓名
},
checkEmail: function () {
//验证邮箱
},
checkPassword: function () {
//验证密码
},
}
} var a = CheckObject();
a.checkEmail();

这样使用的时候只用使用CheckObject这个对象就可以通过返回的新对象的属性去实现不同的功能了。

但是他不是真正意义上的类的创建形式,因为创建的对象a与对象CheckObject没有任何关系。

JS的类

var CheckObject = function () {
this.checkName: function () {
//验证姓名
},
this.checkEmail: function () {
//验证邮箱
},
this.checkPassword: function () {
//验证密码
}
} var a = new CheckObject();
a.checkEmail();

因为通过this定义的方法,所以每次通过new关键字创建新对象的时候,新的对象会对类的this上的属性进行复制,每个新创建的对象都会有自己的一套方法,但是这样是很耗费资源的,可以修改为:

var CheckObject = function () {};
CheckObject.prototype = {
checkName: function () {
//验证姓名
},
checkEmail: function () {
//验证邮箱
},
checkPassword: function () {
//验证密码
}
} var a = new CheckObject();
a.checkEmail();

这样创建对象实例的时候,创建出来的对象所拥有的方法就都是一个了,因为它们都要依赖prototype原型依次寻找,而找到的方法都是同一个,它们都绑定在CheckObject对象类的原型上。

链式调用

var CheckObject = function () {};
CheckObject.prototype = {
checkName: function () {
//验证姓名
return this;
},
checkEmail: function () {
//验证邮箱
return this;
},
checkPassword: function () {
//验证密码
return this;
}
} var a = new CheckObject();
a.checkEmail().checkName().checkPassword();

这样就不必每次调用方法都去书写a了。

调用你老母

虽然可以增加原生类型的方法实现需求,但是,绝对不赞成直接在原生对象上直接添加方法,会造成污染,别人创建的函数也会有这个自定义方法,造成不必要开销,例如

Function.prototype.checkEmail = function () {
//验证邮箱
}; var f = function () {};
f.checkEmail();

但是如果有必要可以增加抽象的方法来实现功能需求:

Function.prototype.addMethod = function (name, fn) {
this.prototype[name] = fn;
return this;
} var Methods = function(){};
Methods.addMethod ('checkName', funciton () {
//验证姓名
}).addMethod ('checkEmail', funciton () {
//验证邮箱
}); var m = new Methods ();
m.checkEmail();

这样通过对原生对象的扩展一个统一添加方法的功能方法,增加了自定义函数,减少了危害。

《JavaScript设计模式》读书笔记——灵活的语言的更多相关文章

  1. JavaScript设计模式:读书笔记(未完)

    该篇随我读书的进度持续更新阅读书目:<JavaScript设计模式> 2016/3/30 2016/3/31 2016/4/8 2016/3/30: 模式是一种可复用的解决方案,可用于解决 ...

  2. JavaScript设计模式 -- 读书笔记

    JavaScript设计模式 一. 设计模式 一个模式就是一个可重用的方案: 有效的解决方法.易重用.善于表达该解决方案: 未通过"模式特性"测试的模式称为模式原型: 三规则:适用 ...

  3. JavaScript设计模式读书笔记之一:接口

    接口 在JavaScrip中模仿接口 用注释描述接口 用属性检查模仿接口 用鸭式辨型模仿接口 依赖于接口的设计模式 工厂模式 组合模式 装饰者模式 命令模式 接口 在JavaScrip中模仿接口 用注 ...

  4. 《Go并发编程实战》读书笔记-初识Go语言

    <Go并发编程实战>读书笔记-初识Go语言 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在讲解怎样用Go语言之前,我们先介绍Go语言的特性,基础概念和标准命令. 一. ...

  5. 《你不知道的javascript》读书笔记2

    概述 放假读完了<你不知道的javascript>上篇,学到了很多东西,记录下来,供以后开发时参考,相信对其他人也有用. 这篇笔记是这本书的下半部分,上半部分请见<你不知道的java ...

  6. HeadFirst设计模式读书笔记--目录

    HeadFirst设计模式读书笔记(1)-策略模式(Strategy Pattern) HeadFirst设计模式读书笔记(2)-观察者模式(Observer Pattern) HeadFirst设计 ...

  7. 《编写可维护的javascript》读书笔记(中)——编程实践

    上篇读书笔记系列之:<编写可维护的javascript>读书笔记(上) 上篇说的是编程风格,记录的都是最重要的点,不讲废话,写的比较简洁,而本篇将加入一些实例,因为那样比较容易说明问题. ...

  8. javascript设计模式 第一章 灵活的javascript

    javascript 设计模式 第1章 灵活的语言--JavaScript 初级程序员接到一个验证表单功能的任务,需要验证用户名.邮箱.密码等 ** 此文章内容大部分来自 <javascript ...

  9. Javascript & JQuery读书笔记

    Hi All, 分享一下我学JS & JQuery的读书笔记: JS的3个不足:复杂的文档对象模型(DOM),不一致的浏览器的实现和便捷的开发,调试工具的缺乏. Jquery的选择器 a. 基 ...

随机推荐

  1. poj 2566 Bound Found

    Bound Found Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 4384   Accepted: 1377   Spe ...

  2. awk命令练习

    文件 file.txt的内容格式: 文件中包含名字,电话号码和过去三个月里的捐款 具体内容如下: Mike Harrington:[510] 548-1278:250:100:175 Christia ...

  3. JavaScript组成(三个组成部分)

    JavaScript主要包括三部分: 1.ECMAScript: JavaScript的核心,仅仅是一个描述,定义了脚本语言的所有属性,方法和对象. 具体地,ECMAscript描述了以下内容: 语法 ...

  4. python利用django实现简单的登录和注册,并利用session实现了链接数据库

    利用session实现与数据库链接,登录模块(在views.py) def login(request): # return HttpResponseRedirect('/') # 判断是否post方 ...

  5. C#基本功之委托和事件

    定义:委托是一种引用类型,表示对具有特定参数列表和返回类型的方法的引用. 在实例化委托时,你可以将其实例与任何具有兼容签名和返回类型的方法相关联 目的:方法声明和方法实现的分离,使得程序更容易扩展 一 ...

  6. 线上Mysql数据库崩溃事故的原因和处理

    前文提要 承接前文<一次线上Mysql数据库崩溃事故的记录>,在文章中讲到了一次线上数据库崩溃的事件记录,建议两篇文章结合在一起看,不至于摸不着头脑. 由于时间原因,其中只讲了当时的一些经 ...

  7. 高阶函数实现AOP

    AOP(面向切面程序)的主要作用是把一些跟核心业务逻辑模块无关的功能抽离出来,这些跟业务逻辑无关的功能通常包括日至统计.安全控制.异常处理等.把这些功能抽离出来之后,再通过"动态织入&quo ...

  8. 10个鲜为人知的C#关键字

    在正式开始之前,我需要先声明:这些关键字对于偏向底层的程序员更加耳熟能详,对这些关键字不了解并不影响你作为一个合格的程序员. 这意味着这些关键字会让你在编写程序时得到更好的代码质量和可读性,enjoy ...

  9. [转载] 谷歌技术"三宝"之BigTable

    转载自http://blog.csdn.net/opennaive/article/details/7532589 2006年的OSDI有两篇google的论文,分别是BigTable和Chubby. ...

  10. 分布式网络文件系统--MooseFS

    一.介绍 1.简介 MooseFS是一个具备冗余容错功能的分布式网络文件系统,它将数据分别存放在多个物理服务器或单独磁盘或分区上,确保一份数据有多个备份副本.对于访问的客户端或者用户来说,整个分布式网 ...