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 | }()); |