用一个变量来标志当前是否已经为某个类创建过对象,如果是,则在下一次获取该类的实例时,直接返回之前创建的对象。
实现单例模式
//1.实现单例模式
var Singleton = function (name) {
this.name = name;
};
Singleton.prototype.getName = function() {
alert(this.name);
};
Singleton.getInstance = (function() {
var instance = null;
return function(name) {
if (!instance) {
instance
继续阅读 »
写在前面
singleton模式是被熟知的原因是因为它限制了类的实例化次数只能一次。从经典意义上来说,singleton模式在该实例不存在的情况下,可以通过一个方法创建一个类来实现创建类的新实例;如果实例已经存在,它会简单返回该对象的引用。
singleton不同于静态类(或对象),因为我们可以推迟它们的初始化,这通常是因为它们需要一些信息,而这些信息在初始化期间可能无法获得、对于没有察觉到之前的引用的代码,它们不会提供方便检索的方法。这是因为它既不是对象,也不是由一个singleton返回的“类”;它是一个结构。
思考一下闭包变量为何实际上并不是闭包,而提供闭包的函数作用域是闭包。在Javascript中,singleton
继续阅读 »
这里介绍一些gulp比较常用的插件,包括util工具类、stream相关、inject相关、Angular相关、压缩工具类、server相关、特定语言相关等。
more
util工具类
这个分类下主要介绍一些辅助工具类的插件。
继续阅读 »
content
{:toc}
简介
lottie 是一个可以轻易的给各种 native app 添加高质量动画的类库。可以在 iOS、Android 和 React Native 实时渲染 After Effects 动画,就像使用静态图片一样容易。上图即为 lottie 的 logo。
简单的说,lottie 动画制作的流程是,通过 Bodymovin 扩展将 AE 动画导出为 json 数据,然后再将这个 json 渲染在客户端或者 web 端。如下图:
继续阅读 »
我们今天要讨论的主题是,大型 JavaScript 应用中一些有效的设计模式。本文基于我最近发布在 LondonJS 上同名演讲,灵感则来自于 Nicholas Zakas 之前的研究成果。
我是谁以及我为什么要撰写这个主题?
我目前是 AOL 的一名 JavaScript 和 UI 开发人员,负责规划和编写下一代面向用户的应用的前端架构。这些应用不仅复杂,而且需要一种可扩展和高复用的架构,我的职责之一就是确保这类应用中的设计模式尽可能是可持续的。
尽管在这个领域有许多比我知识渊博的专家,我也认为自己是设计模式的狂热者。先前,我基于 Creative Commons 许可写了 《Essential JavaScript Des
继续阅读 »
模版方法是一种只需要使用继承就可以实现的非常简单的模式。他由两部分组成,第一部分是抽象父类,第二部分是具体实现子类。通常在抽象父类中封装了子类的算法框架,包括实现一些共用方法以及封装子类所有方法的执行顺序。子类通过继承这个抽象类,也继承了整个算法结构,并且可以选择重写父类的方法。
Coffee or Tea
假设我们现在要泡一杯咖啡步骤如下:
* 把水煮沸
* 用沸水冲泡咖啡
* 把咖啡倒进杯子
* 加糖和牛奶
泡茶的步骤:
* 把水煮沸
* 用沸水浸泡茶叶
* 把茶水倒进杯子
* 加柠檬
经过比较,我们可以发现泡茶和泡咖啡有以下共同点:
原料不同。一个是茶一个是咖啡,但是我们都可以把它们抽
继续阅读 »
前言
命名、抽象、标识是通用设计结构的主要方面,这些设计结构能被用于构造可复用的面向对象设计。设计模式确定所包含的类和实例、它们的角色、协作方式以及职责分配。
每一种设计模式都重点关注一个特定的对象设计问题或者设计要点,描述何时使用它,在另一些约束条件下是否还能使用,以及使用的效果和利弊。由于我们最终要实现设计,设计模式还是提供了示例,代码来阐明其实现。
虽然设计模式描述的是面向对象设计,但是他们都是基于实际的解决方案。这些设计方案的实现语言是主流面向对象的编程语言。
more
设计模式的分类
创建型设计模式
创建型设计模式专注于处理对象创建机制,以适合给定情况下的方式来创建对象,创建对象的基本方法都可能导致项目复杂性增
继续阅读 »
content
{:toc}
本文为慕课网 JavaScript深入浅出 JavaScript 面向对象笔记。
概念
面向对象程序设计(Object-oriented programming,OOP)是一种程序设计范型,同时也是一种程序开发的方法。对象指的是类的实例。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。
——维基百科
继续阅读 »
CSS自定义属性除了简单的保存和获取CSS值机制外,还有很多有趣的用处。在这篇文章里,我们将会探索自定是属性的最佳实践。
浏览器支持度
从图中可以看出浏览器的支持度还是挺高的。
用class分离css和js
大多数情况下,为了分离关注点和简化两者的交互,你想让js和CSS保持高度分离。最简单的经常被工程师实践的示例是使用定义良好的CSS类,在js端为了触发事件驱动的视觉变化,只需要添加或移除相关的css类,比如:
```css
.button {
position: relative;
transform: scale(1);
}
.button.js-toggled {
transform: scale
继续阅读 »
使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系,将这些对象都练成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
如图所示:
请求→A→B→C→D
再来一个更形象的比喻,读书的时候假设你坐在前面,要在上课时告诉后排一些事情,这时候你可能会选择写一张小纸条,小纸条就会陆续的被向后传递。
从上面的例子中,我们可以看到职责链的优点:请求发送者只需要知道链中的第一个节点,从而弱化了发送者和一组接收者之间的强联系。
实际开发中的职责链模式
需求:一个售卖手机的电商网站,交纳500定金和200定金和没交定金的有不同的优惠状况。
我们刚开始可能会这么写:
// orderType: 订单类
继续阅读 »