5

私は現在、ES5 の新機能に基づいた JavaScript API を作成しています。それはObject.definePropertyかなり広範囲に使用されます。Object.createGetSetPropertyこれをとという 2 つの新しい関数にラップしました。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 で適切にフォールバックする方法がわかりません。

これに対する解決策、シム、ポリフィルを知っている人はいますか?

4

1 に答える 1