JavaScript设计模式
来源:互联网 发布:偷水仙花包饺子 知乎 编辑:程序博客网 时间:2024/06/05 00:50
- 使用JavaScript框架和库过程中, 我遇到过很多感觉上'奇形怪状'的代码. 大多数情况下, 按照惯例编写代码也能够写出很多出色的功能. 但是如果不从根本上理解它们实现的方法, 就没办法完全充分发挥出它们的全部优点.
以下是我阅读 JavaScript设计模式(Ross Harmes和Dustin Diaz合著) 后的理解:
Getting Started
JavaScript是一门非常灵活的语言, 完成同一个任务的编程模式可能有很多种. 例如, 我想要编写一个启动/停止的动画:
普通的过程式编程
function startAnimation() {...};
function stopAnimation() {...};
通过定义一个类
var Anim = function() {...};
//把两个方法定义在原型对象中
Anim.prototype.start = function() {...};
Anim.prototype.stop = function() {...};
var myAnim = new Anim();
myAnim.start();
myAnim.stop();
或者, 用字面量对象创建类
var Anim = function() {...};
Anim.prototype = {
start: function() {...},
stop: function() {...},
};
tips: 虽然这两种方法看起来很类似, 实质上有不小的差异.
造成差异的原因是, 每个构造函数的prototype属性默认指向一个原型对象. 原型对象包含一个constructor属性, 这个属性指向它的构造函数.
而字面量式相当于手动创建了一个新的对象, 然后把新对象赋值给了prototype属性. 由于这个新对象是人为定义的, 也没有手动给它定义constructor属性. 所以造成了第二种方式的原型对象的constructor属性没有指向它的构造函数, 而指向了Object, 这显然不是我们想要的.
更加'面向对象'的方式
//在JavaScript中你可以很轻易地
//在原生的Function类中定义一个辅助函数
Function.prototype.method = function(name, fn) {
this.prototype[name] = fn;
};
var Anim = function() {...};
Anim.method( 'start', function() {...} );
Anim.method( 'stop', function() {...} );
简略修改一下以上的代码, 你甚至可以链式调用方法! (在jQuery中被大量应用的技巧)
只需要在辅助函数中返回 this:
Function.prototype.method = function(name, fn) {
this.prototype[name] = fn;
return this;
};
var Anim = function() {...};
Anim.method( 'start', function() {...} )
.method( 'stop', function() {...} );
0 0
- 【javascript】javascript设计模式
- Javascript设计模式(译)
- Javascript 设计模式
- JavaScript 事件设计模式
- 《JavaScript设计模式》第一章
- Javascript事件设计模式
- JavaScript设计模式
- Javascript 设计模式 - Singleton
- JavaScript设计模式
- JavaScript 设计模式
- javascript 设计模式
- javascript设计模式
- javascript 设计模式
- JavaScript设计模式
- JavaScript设计模式
- [博文]JavaScript设计模式
- JavaScript设计模式
- javascript 设计模式
- ServletContext理解 与application异同
- 利用R语言如何聚类
- Android PowerImageView实现,可以播放动画的强大ImageView
- java学习笔记——window7下JDK环境变量配置图解
- 自由、创新、研究、探索
- JavaScript设计模式
- lua解析脚本过程中的关键数据结构介绍
- Sql Server函数全解<五>之系统函数
- 【No_GG】近在咫尺的绝望 _GCJ Round 1B 2015
- C++调用最新版Lua5.3
- jdbcTemeplate-queryForObject-查询为空
- pkg-config讲解
- 完美图片蒙太奇的JS效果基于JQuery实现(多个大小不同图片拼接成图片墙)
- union在XMMATRIX里的妙用