1、明白自己

明白了自己写的代码为什么难懂且臃肿,不方便阅读且效率低。最主要的是为什么整套流程下来只能我一个人写,因为这样的代码根本没有团队力,协同能力差。对js理解的不过透彻。

2、真正的学会对象与类的区别

类 :对一群具有相同特征的对象的集合的描述;
对象:真实存在的对象个体;

比如人类,指的是一个范围; 对象:比如某个人,指的是这个范围中具体的对象。

Javascript中的function作为构造函数时,就是一个类,搭配上new操作符,可以返回一个对象。
当然,要生成一个对象,也可以用字面量的形式,例如var obj = {x: 1, y: function(){} };
类可以理解为一个模板,而对象就是根据这个模板造出来的具体实例。

3、在函数的原型中添加统一添加方法的功能方法

一般不把功能函数封装在原型里面,因为这样会污染全局,造成不必要的开销。所以我会抽象出一个统一的添加方法的功能方法。

例如:

Function.prototype.addMethod=function(name,fn){

  this[name]=fn;

}

如果想添加邮箱验证和姓名验证方法可以这样做

var methods=function(){};

或者

var methods = new Function();

methods.addMethod('checkName',function(){

  //验证姓名

});

methods.addMethod('checkEmail',function(){

  //验证邮箱

});

methods.checkName();

methods.checkEmail();

4、函数链式添加方法

在原型中添加功能的方法中添加返回this语句,这样每次添加完一个方法后都会返回methods函数。

Function.prototype.addMethod= function(name,fn){

  this[name]=fn;

  return this;

}

也可以为每个添加的方法返回this。

var methods = function(){};

methods.addMethod('checkName',function(){

  //验证姓名

  return this;

}).addMethod('checkEmail',function(){

  //验证邮箱

  return this;

});

methods.checkName().checkEmail();

这是用函数式的调用方式

5、类式的调用方式(链式添加)

Function.prototype.addMethod = function(name,fn){

  this.prototype[name]=fn;

  return this;

}

var Methods = function(){};

Methods.addMethod('checkName',function(){

  //验证姓名

  return this

}).addMethod('checkEmail',function(){

  //验证邮箱

  return this

});

但是这时候我们就不能直接使用了,要通过new关键字来创建新的对象了。

var m = new Methods();

m.checkEmail().checkEmail()

两个疑惑:1、函数添加方法的功能方法语句为什么是this[name],为什么是这样写的?

     2、类式添加方法的功能方法语句为什么是this.prototype[name]?这样的话方法不都添加到了原型中去了吗?这样不会污染全局吗?

阅读《JavaScript设计模式》第一章心得的更多相关文章

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

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

  2. 你不知道的javaScript上卷(第一章 作用域是什么)

    在写这篇博客时这本书我已经是看过一遍了,为了加深印象和深入学习于是打算做这系列的前端经典书籍导读博文,大家如果觉得这本书讲的好可以自己买来看看,我是比较喜欢看纸质版书的,因为这样才有读书的那种感觉. ...

  3. [head first 设计模式] 第一章 策略模式

    [head first 设计模式] 第一章 策略模式 让我们先从一个简单的鸭子模拟器开始讲起. 假设有个简单的鸭子模拟器,游戏中会出现各种鸭子,此系统的原始设计如下,设计了一个鸭子超类,并让各种鸭子继 ...

  4. 《JavaScript高级程序设计(第3版)》阅读总结记录第一章之JavaScript简介

    前言: 为什么会想到把<JavaScript 高级程序设计(第 3 版)>总结记录呢,之前写过一篇博客,研究的轮播效果,后来又去看了<JavaScript 高级程序设计(第3版)&g ...

  5. 读《编写可维护的JavaScript》第一章总结

    第一章 基本的格式化 1.4 ① 换行 当一行长度到达了单行最大的字符限制时,就需要手动将一行拆成俩行.通常我们会在运算符后换行,下一行会增加俩个层级的缩进. // 好的做法: 在运算符后换行,第二行 ...

  6. 读高性能JavaScript编程 第一章

    草草的看完第一章,虽然看的是译文也是感觉涨姿势了, 我来总结一下: 由于 大多数浏览器都是 single process 处理 ui updatas and js execute 于是产生问题: js ...

  7. Effective JavaScript :第一章

    第一章 一.严格模式与非严格模式 1.在程序中启用严格模式的方式是在程序的最开始增加一个特定的字符串字面量: ‘use strict’ 同样可以在函数体的开始处加入这句指令以启用该函数的严格模式. f ...

  8. java web开发阅读笔记:第一章

    学习该书前所用推荐书籍<名师讲坛—java开发实战经典> 一web开发前奏 1.1网页发展 首先搞懂. 1.HTTP:超级文本传输协议,是一种通讯协议. 通过这个网络协议WW浏览器与WWW ...

  9. head first 设计模式第一章笔记

    设计模式是告诉我们如何组织类和对象以解决某种问题. 学习设计模式,也就是学习其他开发人员的经验与智慧,解决遇到的相同的问题. 使用模式的最好方式是:把模式装进脑子,然后在设计的时候,寻找何处可以使用它 ...

随机推荐

  1. 《textanalytics》课程简单总结(1):两种word relations——Paradigmatic vs. Syntagmatic

    coursera上的公开课<https://www.coursera.org/course/textanalytics>系列,讲的很不错哦. 1.两种关系:Paradigmatic vs. ...

  2. 防遗忘笔记,Fedora交叉编译window下的virt-iewer的汉化

    1. 汉化代码里的资源 virtviewer使用的是gettex的方案是标准的linux里国际化的方案.按道理仅仅须要改动virtualviewer/po/zh_CN.po的文件. 编译. 然后确认在 ...

  3. LeetCode241——Different Ways to Add Parentheses

    Given a string of numbers and operators, return all possible results from computing all the differen ...

  4. java多线程——线程通信

    一.线程通信目标 1.线程通信的目标是使线程间能够互相发送信号 2.线程通信使线程能够等待其他线程的信号 二.几种方式 1.通过共享对象 2.忙等待 线程 B 运行在一个循环里,以等待信号 (不释放c ...

  5. ios11--UIButton

    // // ViewController.m // 02-UIButton(在代码中使用) // #import "ViewController.h" @interface Vie ...

  6. 如何扩大VMware中的ubuntu虚拟机的磁盘大小

    我是在VMware中安装的ubuntu. 最近虚拟机磁盘空间不够,需要扩展,在虚拟机中设置了扩展20G,然后在ubuntu中发现扩展的20G并不能用.... 正确的扩展方法是: 1.先在虚拟机中的se ...

  7. 布局技巧4:使用ViewStub

    多亏了<include />标签,在Android里,很容易就能做到共享和重用UI组件.在Android开发中,很容易就能创建出复杂的UI结构,结果呢,用了很多的View,且其中的一些很少 ...

  8. allonsy

    时间限制 1s 空间限制 512MB 2.1 题目描述 "Allons-y!" 时间还算足够,好好看看题吧. 有一种说法,时间线是扭曲的,会相互交织.(一般在科幻片里比较流行?) ...

  9. 第四周 Leetcode 124. Binary Tree Maximum Path Sum (HARD)

    124. Binary Tree Maximum Path Sum 题意:给定一个二叉树,每个节点有一个权值,寻找任意一个路径,使得权值和最大,只需返回权值和. 思路:对于每一个节点 首先考虑以这个节 ...

  10. 如何根据configure.ac和Makefile.am为开源代码产生当前平台的Makefile

    1 2 3 4 5 6 7 8 9 //根据configure.in和Makefile.am生成makefile的步骤,基于UBUNTU 12.04 1.autoscan (可选) 2.aclocal ...