是否可以在Rhino中支持document.all()?

时间:2014-10-13 10:21:56

标签: javascript rhino

我正在为Rhino创建自己的自定义DOM。

如您所知,旧版IE支持“不错”。 document.all()功能用于执行节点选择。

可以按照以下方式调用

X) document.all(1).tagName

Y) document.all.[object id].tagName

如果我在我的DOM上声明函数

public object all(object ___param)
{
   return ....;
}

可以处理查询X,但查询Y会抛出错误(因为rhino认为它是属性。

相反,如果我把属性作为

public object all
{
     get
        {
                returns ...;
        }
}

现在可以处理查询Y,但查询X最终会出错,因为它是属性!

(似乎我必须放弃Rhino javascript解释器中的一个选择。)

是否可以创建一个函数对象来处理查询X和查询Y?

提前致谢!

1 个答案:

答案 0 :(得分:1)

这里有几个问题。

首先,Y中的语法不正确。它应该是:

document.all[object id].tagName

其次,如果您关心兼容性,则不推荐使用alleven in Internet Explorer

第三,您的public object all示例也依赖于deprecated JavaScript syntax。您需要使用Object.defineProperty

除此之外,还有另一个需要解决的问题:在Rhino中没有标准的方法,也没有办法让JavaScript对象拥有一个“全能”方法来处理任何属性名称,这就是你的魔力从document.all寻找。 (ECMAScript 6的开发规范包含一个可以使用的功能,称为“代理”,但在Rhino中不支持。)因此,您可以使用的唯一方法是在Java端定义功能(参见{{3例如,并拦截对属性访问的调用。或者,您可以放入一个将对象视为不可变的hack,因此在初始化document对象时,您可以初始化document[propertyname]的所有值,但如果您修改了DOM,它们将停止工作

所以我的建议是,这不值得。但如果是,那就是你的路线图。