1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
| 'use strict'
|
| function reusify (Constructor) {
| var head = new Constructor()
| var tail = head
|
| function get () {
| var current = head
|
| if (current.next) {
| head = current.next
| } else {
| head = new Constructor()
| tail = head
| }
|
| current.next = null
|
| return current
| }
|
| function release (obj) {
| tail.next = obj
| tail = obj
| }
|
| return {
| get: get,
| release: release
| }
| }
|
| module.exports = reusify
|
|