我目前正在制作一个需要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尝试了它的一些部分,但我忘了测试这种方法,它已成为我想要做的事情的关键。我非常希望通过一个简单的链接轻松解决这个问题。它可以通过其他方法解决,但这是迄今为止最干净的方法。 有人可以帮助我朝正确的方向发展吗?
答案 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;
};
}());
}