【发布时间】:2013-06-20 17:00:50
【问题描述】:
我目前正在编写一个基于 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?
【问题讨论】:
-
developer.mozilla.org/en/docs/Web/JavaScript/Reference/… ,他们在页面末尾描述了一个polyfill
标签: javascript ecmascript-5 es5-shim