浏览器的javascript对象库

时间:2015-05-16 12:52:43

标签: javascript

我目前正在制作一个需要Object.keys Object class方法的网页。然而,这需要运行的浏览器是Eve在线的IGB。 此浏览器不支持Object.keys,因此

JavaScript错误:

Uncaught TypeError: Object function Object() { [native code] } has no method 'keys'

我提出的解决方案是找到javascript定义的Object类,并事先在我的页面上引用它,如:

<script src="someURLtoJavascriptObjectClass"></script>

但是我没有通过我的谷歌搜索找到它。

我刚刚在项目工作太久之后才意识到这一点,我只是通过IGB尝试了它的一些部分,但我忘了测试这种方法,它已成为我想要做的事情的关键。我非常希望通过一个简单的链接轻松解决这个问题。它可以通过其他方法解决,但这是迄今为止最干净的方法。 有人可以帮助我朝正确的方向发展吗?

1 个答案:

答案 0 :(得分:4)

您可以尝试在代码中实现Polyfill

// From https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
if (!Object.keys) {
  Object.keys = (function() {
    'use strict';
    var hasOwnProperty = Object.prototype.hasOwnProperty,
        hasDontEnumBug = !({ toString: null }).propertyIsEnumerable('toString'),
        dontEnums = [
          'toString',
          'toLocaleString',
          'valueOf',
          'hasOwnProperty',
          'isPrototypeOf',
          'propertyIsEnumerable',
          'constructor'
        ],
        dontEnumsLength = dontEnums.length;

    return function(obj) {
      if (typeof obj !== 'object' && (typeof obj !== 'function' || obj === null)) {
        throw new TypeError('Object.keys called on non-object');
      }

      var result = [], prop, i;

      for (prop in obj) {
        if (hasOwnProperty.call(obj, prop)) {
          result.push(prop);
        }
      }

      if (hasDontEnumBug) {
        for (i = 0; i < dontEnumsLength; i++) {
          if (hasOwnProperty.call(obj, dontEnums[i])) {
            result.push(dontEnums[i]);
          }
        }
      }
      return result;
    };
  }());
}