什么是设计模式。
  回答这个问题,往往我们得先知道我们为什么需要设计模式,正是因为有需求才会有设计模式,难道不是吗?

我们为什么需要设计模式。
  如果没有按照设计模式去写,你的代码很可能是乱无肆忌写的,也就是随心所欲,想怎么写就怎么写,反正只要出效果就行,好像是没啥问题,但好像又有问题,因为你根本就不知道这段代码在将来会发生什么问题,因此这段代码是不可预测的,另外一点你的代码废话可能会多一些,等等,如果用设计模式来写,往往可以解决这些问题。

那么究竟什么是设计模式。
  其实在‘我们为什么需要设计模式’这段话中已经提到了几点,如果从教学层面来说什么是设计模式的话,可以理解为设计模式就是一种经验,就是前人已经尝试过某些写法,他们知道怎么去写会好一些,怎么去写可能会出错。因此我们只需要按照他们的方式去写代码,就可以解决我们程序中的一些问题。

什么是多态。
  我们知道面向对象其中有一项就是多态,但网上很少有去讲JS多态的问题,主要原因就是JS天生就是多态的。
  如下:

  var a = 10;

a = 'hello world';

  JS可以随意更改变量类型,主要原因就是JS是动态脚本语言,决定变量类型是在运行这段代码时决定的,而不像传统语言在编译的时候就决定了。
  

  再看下面一段代码:  

  function fn(name){
    alert(name);
     }
  fn('zhuimengzi');
  fn('追梦子');  

  根据传入的参数可以打印不同的值。
  多态指的就是同一操作,作用在不同对象上可以产生不同的结果。也想象成动态的,多态多态,不就是指多种形态。
  再如:

  

function Hello(why){
  why.sayHello();
}

var a = {sayHello:function(){alert('我是A')}};
var b = {sayHello:function(){alert('我是B')}};

Hello(a);
Hello(b);

  好像这没啥用吧?如果粗略的看好像是没啥,但细看,却是一种思想,我们来看

  

function Hello(why){
  why.sayHello();
}

var a = {sayHello:function(){alert('我是A')}};
var b = {sayHello:function(){alert('我是B')}};

Hello(a);
Hello(b);

  这段代码其实是有分工的,Hello这个函数它只做一件事就是让一个对象执行一个方法。并不在乎是哪个对象。多态的核心思想就是做什么,和谁去做是分开来的,再看“同一操作,作用在不同对象上可以产生不同的结果。”这句话,这里强调了同一操作,也就是操作同一个东西它可以产生多面性。也就是说Hello里面的代码必须有复用性。你不能说我传另外一个对象,你就不能用了。

鸭子类型。
  鸭子类型即,我不至于你是什么,比如我们经常看电影听到的,我不在乎你长得漂不漂亮,只要是个女的就行,等等这类。再如:我不管你怎么写,你给我提供一个接口就行。对应代码:

var json = {fn:function(){}};
if(json.fn&&(typeof json.fn)==='function'){
  alert('ok');
}

只要有json.fn这个方法就行,我不管你怎么写的,和我没关系。

初了解JS设计模式,学习笔记的更多相关文章

  1. Java设计模式学习笔记(四) 抽象工厂模式

    前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 1. 抽象工厂模式概述 工厂方法模式通过引入工厂等级结构,解决了简单工厂模式中工厂类职责太重的问 ...

  2. 7 种 Javascript 常用设计模式学习笔记

    7 种 Javascript 常用设计模式学习笔记 由于 JS 或者前端的场景限制,并不是 23 种设计模式都常用. 有的是没有使用场景,有的模式使用场景非常少,所以只是列举 7 个常见的模式 本文的 ...

  3. js再学习笔记

    #js再学习笔记 ##基本 1.js严格区分大小写   2.js末尾的分号可加,也可不加   3.六种数据类型(使用typeof来检验数据的类型) `typeof` - undefined: `var ...

  4. JS数组学习笔记

    原文:JS数组学习笔记 最近在备课数组,发现很多ES5的方法平时很少用到.细节比较多,自己做了大量例子和整理,希望对大家了解JavaScript中的Array有所帮助. 概念 数组是值的有序集合.每个 ...

  5. C#设计模式学习笔记-单例模式随笔

    最近学习 设计模式,从单例模式入手 啥是单例模式: 要实现一个单例类的话,首先,肯定是不能让用户自行生产的,那就是说明不能让用户new,所以,就必须把构造函数设置成为私有的 因为静态变量的生命周期跟整 ...

  6. 设计模式学习笔记--备忘录(Mamento)模式

    写在模式学习之前 什么是设计模式:在我们进行程序设计时,逐渐形成了一些典型问题和问题的解决方式,这就是软件模式:每个模式描写叙述了一个在我们程序设计中常常发生的问题,以及该问题的解决方式:当我们碰到模 ...

  7. C#设计模式学习笔记-单例模式(转)

    C#设计模式学习笔记-单例模式 http://www.cnblogs.com/xun126/archive/2011/03/09/1970807.html 最近在学设计模式,学到创建型模式的时候,碰到 ...

  8. Java设计模式学习笔记(二) 简单工厂模式

    前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 正文开始... 1. 简介 简单工厂模式不属于GoF23中设计模式之一,但在软件开发中应用也较为 ...

  9. Java设计模式学习笔记(三) 工厂方法模式

    前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 1. 简介 上一篇博客介绍了简单工厂模式,简单工厂模式存在一个很严重的问题: 就是当系统需要引入 ...

  10. Java设计模式学习笔记(五) 单例模式

    前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 1. 使用单例模式的原因 以Windows任务管理器为例,在Windows系统中,任务管理器是唯 ...

随机推荐

  1. src与 href 的一些区别

    src用于替换当前元素,href用于在当前文档和引用资源之间确立联系. src 是 source 的缩写,指向外部资源的位置,指向的内容将会嵌入到文档中当前标签所在位置:在请求 src 资源时会将其指 ...

  2. wince中测试驱动应用程序的实现

    这里建的工程是MFC的smart device,选择ARMV4I的指令集,不同的设备可能会有轻微的不同,不过大体实现是一样滴.还有,这里选的应用类型是dialog base. 1.应用监测内核动向 内 ...

  3. Eclipse安装与配置

    http://www.th7.cn/Program/java/201307/144477.shtml http://www.eclipse.org/ 我们下载J2EE版本:Eclipse IDE fo ...

  4. 用canvas制作酷炫射击游戏--part2

    今天这一部分主要讲游戏的实现原理与游戏循环的代码实现. 先说原理,大家都看过动画吧.在我看来,游戏就是玩家能人为控制动画剧情发展方向的动画.所以,我们的游戏引擎其实说白了就是个动画引擎再加上鼠标事件. ...

  5. 配置IP地址

    1.linux如果在一个路由器环境中,则可以使用dhclient命令获取IP地址. dhclient 2.手动配置 打开配置文件 vi /etc/sysconfig/network-scripts/i ...

  6. sql常见的面试题

    1.用一条SQL语句 查询出每门课都大于80分的学生姓名 name   kecheng   fenshu 张三     语文       81张三     数学       75李四     语文   ...

  7. javascript position兼容性随笔

    一.Javascript源码 if (!window.jasen.core.Position) { window.jasen.core.Position = {}; } function Size(w ...

  8. mac下android环境搭建笔记(android studio)

    本文记录了本人在mac上配置android开发环境的一些过程,为了方便直接选用了官方的IDE– Android Studio .本文包括了android studio的安装.创建第一个hello wo ...

  9. Grpc微服务从零入门

    快速入门 安装 JDK 毫无疑问,要想玩Java,就必须得先装Java JDK,目前公司主要使用的是Oracle JDK 8,安装完成后要配置环境才能正常使用,真蠢,不过也就那么一下下,认了吧.配置方 ...

  10. Redis 系列 (一) StackExchange.Redis的使用

    一.DLL安装 用NuGet搜索StackExchange.Redis,然后下载就可以. ConnectionMultiplexer对象是StackExchange.Redis最中枢的对象.这个类的实 ...