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

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

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

什么是多态。
  我们知道面向对象其中有一项就是多态,但网上很少有去讲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. JAVA设计模式--抽象工厂模式

    抽象工厂设计模式 1.系统中有多个产品族,而系统一次只可能消费其中一族产品2.同属于同一个产品族的产品以其使用.来看看抽象工厂模式的各个角色(和工厂方法的如出一辙):抽象工厂角色: 这是工厂方法模式的 ...

  2. Linq to Sql 聚合查询

    //输出体重最大的同学,并要求最大体重得大于39,并按照体重大下,对分组结果进行排序. var result = from query in linq.Student group query by q ...

  3. Android中将布局文件转成bitmap

    在实践中发现,有些需要打印的小票高度小于屏幕的高度,而有些小票内容过多高度高于屏幕高度. 小于屏幕高度的布局文件转成bitmap较为容易,高于屏幕高度的布局文件转成长图bitmap较为复杂. 一.小于 ...

  4. android 开发禁止系统修改app的字体大小

    重写activity的getResources方法,一般在BaseActivity中重写就好了,其他activity继承BaseActivity //设置字体大小不随手机设置而改变 @Override ...

  5. C#/net 使用Protocol Buffers入门

    Protocol buffers 是一个由谷歌开发的开源的编码机制用于将结构化的数据序列化或者反序列化,被设计成语言以及平台中立,protobuff比xml更简单比json还要紧凑一些,网上有一些关于 ...

  6. 冲刺阶段 day12

    项目进展 周二我们将专业管理部分又继续做了完善,之前漏掉的几项功能也都在熟能生巧中编写的越来越顺畅,但还差最后一点数据库部分没能实现,我们会尽快完成. 存在问题 还是与数据库的连接上出现问题,部分不能 ...

  7. SpeechLib 语音播报

    SpeechLib这的dll专门用来播放语音,能够识别英语.简体和繁体.并且可以播放声音文件,支持WAV格式,但不支持MP3.在报警场合下已经够用了. 基本播放语音及文件.支持异步. using Sy ...

  8. angularjs ng-option ie issue解决方案

    最近遇见angularjs 在IE上当使用ng-options作为select的选项数据源,并且被套在ng-switch(ng-transclude)之类的,当angular上得ng-options数 ...

  9. [.net 面向对象程序设计进阶] (7) Lamda表达式(三) 表达式树高级应用

    [.net 面向对象程序设计进阶] (7) Lamda表达式(三) 表达式树高级应用 本节导读:讨论了表达式树的定义和解析之后,我们知道了表达式树就是并非可执行代码,而是将表达式对象化后的数据结构.是 ...

  10. Android怎么找到最优适配资源

    当我们将一些提供了不同的资源文件可供Android系统选择的时候,Android会在运行时会根据一套适配的规则选择最符合当前配置的资源.为了说明Android怎么选择资源,假设我们有以下可选的资源文件 ...