鸡肋的E4X

前两天,[url=http://blog.csdn.net/aimingoo]Aimingoo[/url]问我如何能捕获E4X对象的事件(如修改了一个属性),我这两天稍做了研究,发现:

还真没办法!

问题在于E4X的模型,与现有JavaScript和DOM模型根本是不同的!

所以E4X的xml对象上,根本没有addEventListener之类的方法。而E4X的操作也不是基于对象上的方法的,有直接的运算符(例如+=可以用来追加元素),所以甚至也不可能使用暴力AOP(例如改写Element.setAttribute方法)。

理论上说,貌似E4X的xml对象有domNode()方法(我没有核对过规范ECMA357——连不上,难道ecma网站被功夫王河蟹了?),可以获得对应的DOM节点,然后应该可以addEventListener,但是实际上目前无论rhino和spidermonkey都不支持该方法(谁给测一下AS3?)。而且反过来,要对DOM对象包装得到E4X的xml对象(例如new XML(document)),也没有得到支持(再次,谁给测一下AS3)。也就是说,目前为之,E4X的xml对象,虽然是native了,但是和DOM却是完全割裂的。

这种割裂不仅是当前的implementation的问题,而是存在一些深层次的矛盾。

BE同志说:“I have a jaundiced view of E4X”,并指出了一些重要的兼容性问题。

而Rhino的David Caldwell说“Some of these semantics simply can't be transparent, due to underlying differences in the object models”。

问题的细节,有兴趣的同志可以参考:
[url]http://groups.google.com/group/mozilla.dev.tech.js-engine/browse_thread/thread/6566b430328bc3ef#[/url]
[url]https://bugzilla.mozilla.org/show_bug.cgi?id=270553[/url]

一句话,E4X虽然看上去很美,随手用用也不错,但还是存在很多问题的。并且从BE等的表态来看,至少要等到ES4之后,才有可能开始去解决这些问题。

顺便马后炮一下:我从一开始就觉得E4X有点鸡肋。。。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值