我目前正在编写一个基于 ES5 新特性的 JavaScript API。它使用Object.defineProperty
相当广泛。我已经将它包装成两个新函数,称为Object.createGetSetProperty
和Object.createValueProperty
但是,我在旧浏览器中运行它时遇到了问题(例如可怕的 IE8)
考虑以下代码:
Object.createGetSetProperty = function (object, property, get, set, enumerable, configurable) {
if (!Object.defineProperty) throw new Error("Object.defineProperty is not supported on this platform");
Object.defineProperty(object, property, {
get: get,
set: set,
enumerable: enumerable || true,
configurable: configurable || false
});
};
Object.createValueProperty = function (object, property, value, enumerable, configurable, writable) {
if (!Object.defineProperty) {
object[property] = value;
} else {
Object.defineProperty(object, property, {
value: value,
enumerable: enumerable || true,
configurable: configurable || false,
writable: writable || false
});
}
};
如您所见,在 Object.createValueProperty 下有一个优雅的回退,但我不知道如何使用 Object.createGetSetProperty 优雅地回退。
有谁知道任何解决方案,垫片,polyfills?