首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Object.defineProperty polyfill

Object.defineProperty polyfill
EN

Stack Overflow用户
提问于 2013-06-24 16:39:04
回答 1查看 10.5K关注 0票数 4

我目前正在编写一个基于ES5新特性的JavaScript应用程序接口。它非常广泛地使用Object.defineProperty。我已经将其封装到两个新函数中,分别称为Object.createGetSetPropertyObject.createValueProperty

然而,我在较旧的浏览器(例如可怕的IE8)中运行此程序时遇到了问题。

考虑以下代码:

代码语言:javascript
复制
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优雅地后退。

有没有人知道有什么解决方案,填充物,填充物?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-01 00:30:23

为清楚起见,您可能希望坚持使用标准术语,并将例程命名为defineDataPropertydefineAccessorProperty

此外,即使调用者传入false...,您的enumerable: enumerable || true也会产生一个true值。

无论如何,要深入到手头的问题:您不能在IE8中做到这一点。据说defineProperty可以在IE8中工作,但只能在DOM对象上工作。对于涉及在DOM对象上使用onpropertychanged事件的IE7和以下版本,有一些丑陋的技巧。所有这些都已经在其他问题中详细讨论过了,例如Cross-browser Getter and SetterJavaScript getter support in IE8和许多其他问题。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17271224

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档