《Javascript设计模式》笔记一js的表现力
用不同方法完成同样一个任务:启动和停止动画。
1.过程式的程序设计:
function startAnimation(){ ... } function stopAnimation(){ ... }
缺点:无法创建可以保存状态,并且进行一些内部操作的方法,所以2.创建对象的方法如下:
var Anim = function(){ ... } Anim.prototype.start = function(){ ... } Anim.prototype.stop = function(){ ... } var myAnim = new Anim(); myAnim.start(); myAnim.stop();
3.当然也可以把上面类的定义封装在一条声明当中,如下:
var Anim = function(){ ... } Anim.prototype = { start:function(){}, stop:function(){} }
上面的是大多数屌丝程序员常用的方法,4.下面是逼格更高的写法:
Function.prototype.method = function(name,fn){ this.prototype[name] = fn; } var Anim = function(){ ... } Anim.method('start',function(){ ... }); Anim.method('stop',function(){ ... });
说明:Function.prototype.method用于为类添加新方法,2个参数(方法名,新的方法)
5.当然也可以继续更改Function.prototype.method,使其可以被链调用,只要让他返回this即可
Function.prototype.method = function(name.fn){ this.prototype[name] = fn; return this; }; var Anim = function(){ }; Anim. method('start',function(){ ... }). method('stop',function(){ ... });
以上5种方法,均可以完成同一项任务。
==========
函数的特性:
1.可以存储在变量当中
2.可以作为参数传给其他函数
3.可以作为返回值从其他函数传出
4.可以在运行时进行构造
匿名函数实例:
(function(){ var foo = 10; var bar = 2; alert(foo*bar); })(); //被定义后立即执行,函数最后一对括号立即对函数进行调用,括号中没有参数。
(function(foo,bar){ alert(foo*bar); })(10,2); //变量做为参数传递进去 var baz = (function(){ return foo*bar;//返回值赋给变量baz })(10,2);
函数有一个用途就是创建闭包。
1.Javascript有函数级作用域,定义在函数内部的变量不能再外部被调用。
2.函数运行在定义它的作用域中,而不是在调用它的作用域中。
var baz; (function(){ var foo = 10; var bar = 2; baz = function(){ return foo*bar; } })(); baz();
《Javascript设计模式》笔记一js的表现力的更多相关文章
- Javascript设计模式笔记
Javascript是越来越厉害了,一统前后端开发.于是最近把设计模式又看了一遍,顺便做了个笔记,以方便自己和他人共同学习. 笔记连载详见:http://www.meteorcn.net/wordpr ...
- Javascript 设计模式笔记
设计模式太多了 还有些模式概念非常接近(比如观察者 中介者 和 事件发布/订阅模式) 构造器模式 var newObject = {} var newObject = new XXX(); 模块模式 ...
- javascript学习笔记(四) Number 数字类型
数字格式化方法toFixed().toExponential().toPrecision(),三个方法都四舍五入 toFixed() 方法指定小数位个数 toExponential() 方法 用科学 ...
- javaScript设计模式之面向对象编程(object-oriented programming,OOP)(二)
接上一篇 面向对象编程的理解? 答:面向对象编程,就是将你的需求抽象成一个对象,然后针对这个对象分析其特征(属性)与动作(方法).这个对象我们称之为类.面向对象编程思想其中一个特点就是封装,就是把你需 ...
- JavaScript基础笔记集合(转)
JavaScript基础笔记集合 JavaScript基础笔记集合 js简介 js是脚本语言.浏览器是逐行的读取代码,而传统编程会在执行前进行编译 js存放的位置 html脚本必须放在&l ...
- 再起航,我的学习笔记之JavaScript设计模式01
我的学习笔记是根据我的学习情况来定期更新的,预计2-3天更新一章,主要是给大家分享一下,我所学到的知识,如果有什么错误请在评论中指点出来,我一定虚心接受,那么废话不多说开始我们今天的学习分享吧! 在通 ...
- 再起航,我的学习笔记之JavaScript设计模式03
我的学习笔记是根据我的学习情况来定期更新的,预计2-3天更新一章,主要是给大家分享一下,我所学到的知识,如果有什么错误请在评论中指点出来,我一定虚心接受,那么废话不多说开始我们今天的学习分享吧! 上一 ...
- 再起航,我的学习笔记之JavaScript设计模式05(简单工程模式)
我的学习笔记是根据我的学习情况来定期更新的,预计2-3天更新一章,主要是给大家分享一下,我所学到的知识,如果有什么错误请在评论中指点出来,我一定虚心接受,那么废话不多说开始我们今天的学习分享吧! 前几 ...
- 再起航,我的学习笔记之JavaScript设计模式05(简单工厂模式)
我的学习笔记是根据我的学习情况来定期更新的,预计2-3天更新一章,主要是给大家分享一下,我所学到的知识,如果有什么错误请在评论中指点出来,我一定虚心接受,那么废话不多说开始我们今天的学习分享吧! 前几 ...
随机推荐
- HDU 3605:Escape(最大流+状态压缩)
http://acm.hdu.edu.cn/showproblem.php?pid=3605 题意:有n个人要去到m个星球上,这n个人每个人对m个星球有一个选择,即愿不愿意去,"Y" ...
- 树上倍增LCA模版
void dfs(int u){ ;i = edge.next){ int to = dege[i].to; ]) continue; d[to] = d[u]+; dis[to] = dis[u]+ ...
- Centos7永久修改主机名
最近在编写centos6.x的启动脚本,考虑到以后系统会升到7.x,故想让脚本兼容7.x,还是有一些和6版本不一样的地址,修改主机名比较常用,特此记录一下 1.命令行修改: hostnamectl s ...
- Android多媒体--MediaCodec 中文API文档
*由于工作需要,需要利用MediaCodec实现Playback及Transcode等功能,故在学习过程中翻译了Google官方的MediaCodec API文档,由于作者水平限制,文中难免有错误和不 ...
- x86和x64的区别
整理了下网上的资料,归类了下,大似表述是这样的:IBM/PC兼容机,也就是Intel的i80x86指令架构,就简称了x86.x86并不是指32位环境,而是指80x86架构,这个架构目前有32位,64位 ...
- Linux从程序到进程
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在高级语言中,这些内存管理的细节对于用户来说不透明.在编程的时候,我们只需要记住上 ...
- 使用Maven JGit-Flow Plugin
git flow 请参考 http://www.ituring.com.cn/article/56870 2.开始使用插件,在pom.xml中添加以下代码: https://bitbucket.org ...
- 在ionic/cordova中使用Form模型验证(w5cValidator)
在构建ionic项目过程中,当我们创建一个类似表单提交的页面时,可能会对用户的输入内容做某些规则验证,通过后再执行提交处理. 在验证的过程中,为了提供较好的用户体验,可能希望有类似于jquery Va ...
- servlet学习笔记_3
一.路径问题如果是在浏览器端请求服务器的数据(超链接,js的src),那么加/代表在Tomcat的webapp目录,不加/的话通常不考虑,实际上不加/在浏览器端也是当前项目目录(但是开发中通常必须要写 ...
- TCP/IP协议学习(七) 基于C# Socket的Web服务器---动态通讯实现
目录 (1).基于Ajax的前端实现 (2).Web服务器后端处理 一个完整的web服务器,不仅需要满足用户端对于图片.文档等资源的需求:还能够对于用户端的动态请求,返回指定程序生成的数据.支持动态请 ...