root / HServer / 00.Server / 00.Program / node_modules / once / once.js
이력 | 보기 | 이력해설 | 다운로드 (935 Bytes)
1 |
var wrappy = require('wrappy') |
---|---|
2 |
module.exports = wrappy(once) |
3 |
module.exports.strict = wrappy(onceStrict) |
4 |
|
5 |
once.proto = once(function () {
|
6 |
Object.defineProperty(Function.prototype, 'once', {
|
7 |
value: function () { |
8 |
return once(this) |
9 |
}, |
10 |
configurable: true |
11 |
}) |
12 |
|
13 |
Object.defineProperty(Function.prototype, 'onceStrict', {
|
14 |
value: function () { |
15 |
return onceStrict(this) |
16 |
}, |
17 |
configurable: true |
18 |
}) |
19 |
}) |
20 |
|
21 |
function once (fn) { |
22 |
var f = function () { |
23 |
if (f.called) return f.value |
24 |
f.called = true
|
25 |
return f.value = fn.apply(this, arguments) |
26 |
} |
27 |
f.called = false
|
28 |
return f
|
29 |
} |
30 |
|
31 |
function onceStrict (fn) { |
32 |
var f = function () { |
33 |
if (f.called)
|
34 |
throw new Error(f.onceError) |
35 |
f.called = true
|
36 |
return f.value = fn.apply(this, arguments) |
37 |
} |
38 |
var name = fn.name || 'Function wrapped with `once`' |
39 |
f.onceError = name + " shouldn't be called more than once"
|
40 |
f.called = false
|
41 |
return f
|
42 |
} |