root / HServer / 00.Server / 00.Program / node_modules / object-keys / shim.js
이력 | 보기 | 이력해설 | 다운로드 (1.51 KB)
1 | 39 | HKM | (function () {
|
---|---|---|---|
2 | "use strict";
|
||
3 | |||
4 | // modified from https://github.com/kriskowal/es5-shim
|
||
5 | var has = Object.prototype.hasOwnProperty,
|
||
6 | toString = Object.prototype.toString, |
||
7 | forEach = require('./foreach'),
|
||
8 | isArgs = require('./isArguments'),
|
||
9 | hasDontEnumBug = !({'toString': null}).propertyIsEnumerable('toString'), |
||
10 | hasProtoEnumBug = (function () {}).propertyIsEnumerable('prototype'), |
||
11 | dontEnums = [ |
||
12 | "toString",
|
||
13 | "toLocaleString",
|
||
14 | "valueOf",
|
||
15 | "hasOwnProperty",
|
||
16 | "isPrototypeOf",
|
||
17 | "propertyIsEnumerable",
|
||
18 | "constructor"
|
||
19 | ], |
||
20 | keysShim; |
||
21 | |||
22 | keysShim = function keys(object) { |
||
23 | var isObject = object !== null && typeof object === 'object', |
||
24 | isFunction = toString.call(object) === '[object Function]',
|
||
25 | isArguments = isArgs(object), |
||
26 | theKeys = []; |
||
27 | |||
28 | if (!isObject && !isFunction && !isArguments) {
|
||
29 | throw new TypeError("Object.keys called on a non-object"); |
||
30 | } |
||
31 | |||
32 | if (isArguments) {
|
||
33 | forEach(object, function (value) {
|
||
34 | theKeys.push(value); |
||
35 | }); |
||
36 | } else {
|
||
37 | var name,
|
||
38 | skipProto = hasProtoEnumBug && isFunction; |
||
39 | |||
40 | for (name in object) { |
||
41 | if (!(skipProto && name === 'prototype') && has.call(object, name)) { |
||
42 | theKeys.push(name); |
||
43 | } |
||
44 | } |
||
45 | } |
||
46 | |||
47 | if (hasDontEnumBug) {
|
||
48 | var ctor = object.constructor,
|
||
49 | skipConstructor = ctor && ctor.prototype === object; |
||
50 | |||
51 | forEach(dontEnums, function (dontEnum) {
|
||
52 | if (!(skipConstructor && dontEnum === 'constructor') && has.call(object, dontEnum)) { |
||
53 | theKeys.push(dontEnum); |
||
54 | } |
||
55 | }); |
||
56 | } |
||
57 | return theKeys;
|
||
58 | }; |
||
59 | |||
60 | module.exports = keysShim; |
||
61 | }()); |