首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在IE8的JavaScript中添加不可枚举的属性?

如何在IE8的JavaScript中添加不可枚举的属性?
EN

Stack Overflow用户
提问于 2013-07-30 05:52:41
回答 1查看 1.2K关注 0票数 1

有没有办法将“隐藏的”不可枚举属性添加到跨浏览器工作的JavaScript对象中?

对于大多数现代浏览器,您可以执行以下操作:

代码语言:javascript
复制
Object.defineProperty(obj, '__id__', { enumerable: false, value: id++ });

对于一些没有Object.defineProperty的旧版非IE浏览器,您可以使用the __proto__ hack

然而,这些都不适用于IE。有没有一种在IE8中实现这一点的方法(如果使用IE7也会很酷,但不是必须的)?

主要目标是能够向任何JavaScript {}对象添加跟踪器属性,但这样当您调用JSON.stringify(obj)时,它不会包含在属性中。我知道您可以添加自定义JSON替换函数(基本上是扩展JSON.stringify功能),但我并不是一个很喜欢这样做的人,因为这意味着当您将这些被跟踪的JavaScript对象序列化为JSON时,您必须知道/记住添加替换函数,这是非常不切实际的。

有什么方法可以做到这一点吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-30 06:13:15

我不能在IE10的IE8兼容模式下重现它,但是定义一个像"toLocaleString"这样的属性应该可以,因为有了the don't enum bug in IE8

代码语言:javascript
复制
var uniqueId = function() {
    var dontEnumBug = false;
    var id = 0;

    if( !Object.defineProperty ) {
        var keyVisited = false;
        for( var k in {toLocaleString: 3}) {
            if( k === "toLocaleString" ) {
                keyVisited = true; 
            }
        }
        if( !keyVisited ) {
            dontEnumBug = true;
        }
    }

    return function( obj ) {
        if( dontEnumBug ) {
            obj.toLocaleString = id++;
        }
        else {
            Object.defineProperty(obj, '__id__', { enumerable: false, value: id++ });
        }

    }

})();

您也可以使用"isPrototypeOf""propertyIsEnumerable",因为这些也是几乎从未调用过的函数。

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

https://stackoverflow.com/questions/17934888

复制
相关文章

相似问题

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