Skip to content

Commit

Permalink
add pattern/DesignPattern
Browse files Browse the repository at this point in the history
  • Loading branch information
ruanyf committed Feb 4, 2013
1 parent 2082f35 commit 6d6f206
Show file tree
Hide file tree
Showing 3 changed files with 55 additions and 2 deletions.
2 changes: 1 addition & 1 deletion grammar/function.md
Expand Up @@ -196,7 +196,7 @@ f()


## 变量提升(hoisting) ## 变量提升(hoisting)


Javascript解释器的工作方式是,先读取全部代码,再进行解释。这样的结果就是,函数体内部的var命令声明的变量,不管在什么位置,都会被提升到函数开始处声明,这就叫做“变量提升”。 Javascript解释器的工作方式是,先读取全部代码,再进行解释。这样的结果就是,函数体内部的var命令声明的变量,如同在全局作用域下一样,会产生“变量提升”现象:不管在什么位置,变量都会被提升到函数开始处声明


{% highlight javascript %} {% highlight javascript %}


Expand Down
3 changes: 2 additions & 1 deletion index.md
Expand Up @@ -2,7 +2,7 @@
layout: homepage layout: homepage
title: Javascript 标准教程 title: Javascript 标准教程
date: 2012-11-18 date: 2012-11-18
modifiedOn: 2013-02-01 modifiedOn: 2013-02-04
--- ---


<h2 id="introduction">导论</h2> <h2 id="introduction">导论</h2>
Expand Down Expand Up @@ -74,6 +74,7 @@ modifiedOn: 2013-02-01


<h2 id="pattern">模式</h2> <h2 id="pattern">模式</h2>


- [设计模式](pattern/designpattern.html)
- [异步编程](pattern/asynchronous.html) - [异步编程](pattern/asynchronous.html)


<h2 id="algorithm">算法</h2> <h2 id="algorithm">算法</h2>
Expand Down
52 changes: 52 additions & 0 deletions pattern/designpattern.md
@@ -0,0 +1,52 @@
---
title: 设计模式
category: pattern
layout: page
date: 2013-02-04
modifiedOn: 2013-02-04
---

"设计模式"(Design Pattern)是针对编程中经常出现的、具有共性的问题,所提出的解决方法。著名的《设计模式》一书一共提出了23种模式。

## Singleton

Singleton模式指的是一个“类”只能创造一个实例。由于JavaScript语言没有类,单个对象可以直接生成,所以实际上,没有必要部署Singleton模式。但是,还是可以做到的。

{% highlight javascript %}

var someClass = {

_singleton: null,
getSingleton: function() {

if (!this._singleton) {
this._singleton = {
// some code here
}
}
return this._singleton;
}
};

var instance = someClass.getSingleton();

{% endhighlight %}

生成实例的时候,调用getSingleton方法。该方法首先检查_singleton属性是否有值,如果有值就返回这个属性,如果为空则生成新的实例,并赋值给_singleton属性,然后返回这个实例。这样就保证了生成的实例都是同一个对象。

为了保证实例不被改写,可以关闭它的写入开关。

{% highlight javascript %}

Object.defineProperty(namespace, "singleton",
{ writable: false, configurable: false, value: { ... } });

{% endhighlight %}

也可以考虑使用Object.preventExtensions()、Object.seal()、Object.freeze()等方法,限制对实例进行写操作。

## 参考链接

- Dr. Axel Rauschmayer,[The Singleton pattern in JavaScript: not needed](http://www.2ality.com/2011/04/singleton-pattern-in-javascript-not.html)

0 comments on commit 6d6f206

Please sign in to comment.