JavaScript进阶设计模式系列——基础篇——闭包(5)--命令模式的两种实现方式
来源:互联网 发布:如何做好淘宝售后服务 编辑:程序博客网 时间:2024/06/07 00:26
在面向对象的世界中,过程和数据是一个经常被使用的表达方式。对象,通过方法的形式包含着过程,而闭包则是在过程中以环境的形式包含了数据,因此,只要是用面向对象思想实现的东西,基本上用闭包的思想也能实现。下面,咱们看一则实例,分别使用面向对象形式来实现的写法和使用闭包形式的写法。
面向对象的写法
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>commandpatern</title></head><body> <button id="execute">click me !</button> <button id="undo">click me !</button> <script> var Tv = {//电视机本身应该具有的方法 open: function() { console.log('open TV !') }, close : function(){ console.log('close TV !') } } var OpenTvCommand = function(receiver){ //命令对象本身 this.receiver = receiver; } OpenTvCommand.prototype.execute = function () { this.receiver.open(); } OpenTvCommand.prototype.undo = function () { this.receiver.close(); } var setCommand = function (command) {//相当于要遥控器、命令的发出者 document.getElementById('execute').onclick = function () { command.execute(); } document.getElementById('undo').onclick = function () { command.undo(); } } setCommand( new OpenTvCommand(Tv)); </script></body></html>
闭包方式的实现:
var Tv = { open: function () { console.log('open TV'); }, close: function () { console.log('close TV'); }};var OpenTvCommand =function (receiver) {//此处不使用立即执行函数的方式,也不需要OpenTVCommand对象自己持有变量,因为receiver这个局部变量会被闭包环境包围,这个局部变量被延续了生命周期 // this.receiver = receiver; var execute = function () { receiver.open(); } var undo = function () { receiver.close(); } return { execute: execute, undo: undo }};var setCommond = function (command) { document.getElementById('execute').onclick=function () { command.execute(); } document.getElementById('undo').onclick=function () { command.undo(); }}setCommond(OpenTvCommand(Tv));//不需要new这个对象,因为OpenTVCommand返回一个对象
阅读全文
0 0
- JavaScript进阶设计模式系列——基础篇——闭包(5)--命令模式的两种实现方式
- JavaScript进阶设计模式系列——基础篇——闭包(3)--闭包的作用
- JavaScript进阶设计模式系列——基础篇——闭包(1)--闭包和作用域
- JavaScript进阶设计模式系列——基础篇——闭包(2)--闭包和生命周期
- JavaScript进阶设计模式系列——基础篇——闭包(4)--闭包和面向对象的设计
- JavaScript进阶设计模式系列——基础篇——this-call-apply
- JavaScript进阶设计模式系列——基础篇——高阶函数
- 设计模式系列(七)——命令模式
- Android重拾设计模式系列——单例模式的5种实现
- 设计模式C++实现(19)——命令模式
- 设计模式C++实现(17)——命令模式
- 设计模式—命令模式
- 设计模式—命令模式
- 设计模式—命令模式
- 设计模式—命令模式
- 15-JavaScript设计模式——命令模式
- java中单例设计模式的两种实现方式
- 工厂设计模式的两种实现方式
- javascript callee()属性
- 解决windows系统因TCP端口不足导致mysql数据库无法访问的问题
- Kotlin基础 8
- AS设置
- TCP和SOCKET关系
- JavaScript进阶设计模式系列——基础篇——闭包(5)--命令模式的两种实现方式
- TCP三次握手与四次挥手
- PS图片压缩教程,教你快速压缩jpg图片文件的大小而又不失真!
- Android MediaCodec硬解码H264文件
- 在不同版本python下安装tensorflow
- WIFI (热点)打开和关闭
- 选择排序(selection sort)
- 求各位帮我设计一个三极管开关电路(以SS8050)为例,具体要求看问题补充.多谢
- R数据结构