初了解JS设计模式,学习笔记
什么是设计模式。
回答这个问题,往往我们得先知道我们为什么需要设计模式,正是因为有需求才会有设计模式,难道不是吗?
我们为什么需要设计模式。
如果没有按照设计模式去写,你的代码很可能是乱无肆忌写的,也就是随心所欲,想怎么写就怎么写,反正只要出效果就行,好像是没啥问题,但好像又有问题,因为你根本就不知道这段代码在将来会发生什么问题,因此这段代码是不可预测的,另外一点你的代码废话可能会多一些,等等,如果用设计模式来写,往往可以解决这些问题。
那么究竟什么是设计模式。
其实在‘我们为什么需要设计模式’这段话中已经提到了几点,如果从教学层面来说什么是设计模式的话,可以理解为设计模式就是一种经验,就是前人已经尝试过某些写法,他们知道怎么去写会好一些,怎么去写可能会出错。因此我们只需要按照他们的方式去写代码,就可以解决我们程序中的一些问题。
什么是多态。
我们知道面向对象其中有一项就是多态,但网上很少有去讲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设计模式,学习笔记的更多相关文章
- Java设计模式学习笔记(四) 抽象工厂模式
前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 1. 抽象工厂模式概述 工厂方法模式通过引入工厂等级结构,解决了简单工厂模式中工厂类职责太重的问 ...
- 7 种 Javascript 常用设计模式学习笔记
7 种 Javascript 常用设计模式学习笔记 由于 JS 或者前端的场景限制,并不是 23 种设计模式都常用. 有的是没有使用场景,有的模式使用场景非常少,所以只是列举 7 个常见的模式 本文的 ...
- js再学习笔记
#js再学习笔记 ##基本 1.js严格区分大小写 2.js末尾的分号可加,也可不加 3.六种数据类型(使用typeof来检验数据的类型) `typeof` - undefined: `var ...
- JS数组学习笔记
原文:JS数组学习笔记 最近在备课数组,发现很多ES5的方法平时很少用到.细节比较多,自己做了大量例子和整理,希望对大家了解JavaScript中的Array有所帮助. 概念 数组是值的有序集合.每个 ...
- C#设计模式学习笔记-单例模式随笔
最近学习 设计模式,从单例模式入手 啥是单例模式: 要实现一个单例类的话,首先,肯定是不能让用户自行生产的,那就是说明不能让用户new,所以,就必须把构造函数设置成为私有的 因为静态变量的生命周期跟整 ...
- 设计模式学习笔记--备忘录(Mamento)模式
写在模式学习之前 什么是设计模式:在我们进行程序设计时,逐渐形成了一些典型问题和问题的解决方式,这就是软件模式:每个模式描写叙述了一个在我们程序设计中常常发生的问题,以及该问题的解决方式:当我们碰到模 ...
- C#设计模式学习笔记-单例模式(转)
C#设计模式学习笔记-单例模式 http://www.cnblogs.com/xun126/archive/2011/03/09/1970807.html 最近在学设计模式,学到创建型模式的时候,碰到 ...
- Java设计模式学习笔记(二) 简单工厂模式
前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 正文开始... 1. 简介 简单工厂模式不属于GoF23中设计模式之一,但在软件开发中应用也较为 ...
- Java设计模式学习笔记(三) 工厂方法模式
前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 1. 简介 上一篇博客介绍了简单工厂模式,简单工厂模式存在一个很严重的问题: 就是当系统需要引入 ...
- Java设计模式学习笔记(五) 单例模式
前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 1. 使用单例模式的原因 以Windows任务管理器为例,在Windows系统中,任务管理器是唯 ...
随机推荐
- React Native填坑之旅--class(番外篇)
无论React还是RN都已经迈入了ES6的时代,甚至凭借Babel的支持都进入了ES7.ES6内容很多,本文主要讲解类相关的内容. 构造函数 定义侦探类作为例子. ES5的"类"是 ...
- Cassandra对读写请求的处理机制
1 写请求: 单数据中心: 向所有副本发写请求, 所有副本都写数据, 只要有一致性水平指定数目的节点返回正确响应, 就认为写成功. 多数据中心: 客户端发起写数据请求后, 本地代理节点会把请求发给每个 ...
- java解析xml
一.Document对象相关 1.读取XML文件,获得document对象. SAXReader reader = new SAXReader(); ...
- Apache Marmotta 3.1.0-incubating 发布
Apache Marmotta 3.1.0-incubating 发布了,Apache Marmotta 项目的目的是提供 Linked Data Platform 的开源实现,可让组织轻松的使用.扩 ...
- Linux CentOS下如何确认MySQL服务已经启动
Linux CentOS一般做为服务器使用,因此,MySQL服务应该随开机自动启动的.正常情况下,查看开机自动启动的服务使用chkconfig命令,如下: #chkconfig --list 实际使用 ...
- .Net Core CLI windows安装
下载官方的msi安装包official MSI installer双击安装就可以了. 默认会安装到C:\Program Files\dotnet\目录下,如果找不到可以用命令 where dotnet ...
- 图解集合5:不正确地使用HashMap引发死循环及元素丢失
问题引出 前一篇文章讲解了HashMap的实现原理,讲到了HashMap不是线程安全的.那么HashMap在多线程环境下又会有什么问题呢? 几个月前,公司项目的一个模块在线上运行的时候出现了死循环,死 ...
- session机制详解以及session的相关应用
session是web开发里一个重要的概念,在大多数web应用里session都是被当做现成的东西,拿来就直接用,但是一些复杂的web应用里能拿来用的session已经满足不了实际的需求,当碰到这样的 ...
- 走进AngularJs(四)自定义指令----(中)
上一篇简单介绍了自定义一个指令的几个简单参数,restrict.template.templateUrl.replace.transclude,这几个理解起来相对容易很多,因为它们只涉及到了表现,而没 ...
- 渐析java的浅拷贝和深拷贝
首先来看看浅拷贝和深拷贝的定义: 浅拷贝:使用一个已知实例对新创建实例的成员变量逐个赋值,这个方式被称为浅拷贝. 深拷贝:当一个类的拷贝构造方法,不仅要复制对象的所 ...