如何在IE8的JavaScript中添加不可枚举属性?
有没有办法向跨浏览器工作的JavaScript对象添加“隐藏的”不可枚举属性 对于大多数现代浏览器,您可以执行以下操作:如何在IE8的JavaScript中添加不可枚举属性?,javascript,internet-explorer-8,cross-browser,enumerable,Javascript,Internet Explorer 8,Cross Browser,Enumerable,有没有办法向跨浏览器工作的JavaScript对象添加“隐藏的”不可枚举属性 对于大多数现代浏览器,您可以执行以下操作: Object.defineProperty(obj, '__id__', { enumerable: false, value: id++ }); 对于一些没有Object.defineProperty的旧版非IE浏览器,您可以使用 然而,这些都不适用于IE。在IE8中有没有实现这一点的方法(如果IE7也可以,那会很酷,但不是必需的) 主要目标是能够向任何JavaScrip
Object.defineProperty(obj, '__id__', { enumerable: false, value: id++ });
对于一些没有Object.defineProperty
的旧版非IE浏览器,您可以使用
然而,这些都不适用于IE。在IE8中有没有实现这一点的方法(如果IE7也可以,那会很酷,但不是必需的)
主要目标是能够向任何JavaScript{}
对象添加跟踪器属性,但是当您调用JSON.stringify(obj)
时,它不会包含在属性中。我知道你可以添加自定义的JSON替换函数(基本上是扩展JSON.stringify
功能),但我不太喜欢这样,因为这意味着任何时候你将这些被跟踪的JavaScript对象序列化为JSON时,你都必须知道/记住添加替换函数,这是非常不切实际的
有什么方法可以做到这一点吗?我不能在IE10的IE8兼容模式下复制它,但是 定义像
“ToLocalString”
这样的属性应该可以工作,因为
您也可以使用
“isPrototypeOf”
或“propertyIsEnumerable”
,因为这些也是几乎从未调用过的函数。您说的是IE8+,但Object.defineProperty()
在IE9中不起作用?哦,是的,我想我只是指IE8。如果有一种方法也支持IE7,那就太棒了,但基本上就是如何在IE8中实现它。更新的问题。@LancePollard我想有个bug。。只是不要用这个代码好吧哈哈
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++ });
}
}
})();