Javascript 如何在Safari中使DOM处理程序可枚举?
我需要枚举我以前修改过的DOM元素的所有属性。我可以用Firefox、Chrome和Opera来做,但我不能用Safari,我现在不在乎IEJavascript 如何在Safari中使DOM处理程序可枚举?,javascript,safari,webkit,ecmascript-5,dontenum,Javascript,Safari,Webkit,Ecmascript 5,Dontenum,我需要枚举我以前修改过的DOM元素的所有属性。我可以用Firefox、Chrome和Opera来做,但我不能用Safari,我现在不在乎IE <a id="link">Link...</a> <script> var link = document.getElementById("link"); var foo = function (baz) {}; link.onclick = foo; alert ("onclick" i
<a id="link">Link...</a>
<script>
var link = document.getElementById("link");
var foo = function (baz) {};
link.onclick = foo;
alert ("onclick" in link); // true
alert (link.hasOwnProperty("onclick")); // true
alert (link.propertyIsEnumerable("onclick"));
// false with Chrome, Safari, Opera*
</script>
我可以通过在分配onclick属性之前删除它,在Chrome中实现第三个警报输出:
delete link.onclick;
但Safari中尚未列举该属性
我甚至尝试了EcmaScript 5对象方法:
但它返回错误:
TypeError:DOM对象不支持defineProperty
有什么建议吗
另外,为什么Safari的行为与Chrome不同,尽管它们都基于Webkit?将其与在中实现ECMAScript 5对象方法的Webkit版本进行比较。Chrome的Webkit版本与Safari不同,因此标准支持也会相应不同。回答您的问题:Webkit是渲染引擎。对于Javascript,Safari使用JavaScriptCore引擎SquirreFish,Chrome使用V8。
delete link.onclick;
Object.defineProperty (link, onclick, {
value: foo,
enumerable: true,
configurable: true,
writable: true
});