为什么svg规范区分了unsettable和readonly属性?

时间:2014-06-03 02:03:55

标签: svg

SVG 1.1规范(版本2)的

Section 4.5.1描述了SVGElement接口 - SVG对象的“基类”。它说:

interface SVGElement : Element {
           attribute DOMString id setraises(DOMException);
           attribute DOMString xmlbase setraises(DOMException);
  readonly attribute SVGSVGElement ownerSVGElement;
  readonly attribute SVGElement viewportElement;
};

属性:

  • id(DOMString)

    • 给定元素上'id'属性的值,如果'id'不存在则为空字符串。 设置

      的例外情况
      • DOMException,代码NO_MODIFICATION_ALLOWED_ERR     尝试更改只读属性的值时触发。
  • xmlbase(DOMString)

    • 对应于给定元素的属性'xml:base'。

      设置

      的例外情况
      • DOMException,代码NO_MODIFICATION_ALLOWED_ERR     尝试更改只读属性的值时触发。
  • ownerSVGElement(readonly SVGSVGElement)

    最近的祖先'svg'元素。如果给定元素是最外面的svg元素,则为空。

  • viewportElement(readonly SVGElement)

    建立当前视口的元素。通常,最近的祖先'svg'元素。如果给定元素是最外面的svg元素,则为空。

所以这些属性都不可写。如果你试图写信给他们,为什么他们中的两个会引发异常?另外两个不会引发异常吗? 'readonly'和'setraises'有什么区别?

1 个答案:

答案 0 :(得分:0)

setraises并不意味着该属性不可写。它只是意味着设置它可能引发一个DomException。在SVG DOM中,所有非readonly的属性都以这种方式注释。

对于SVGElement.id,我不知道设置id会引发异常的任何情况。也许,在某些SVG实现中,很少有情况下DOM处于不允许更改id的状态。但我认为你不必担心这一点。

至于readonly属性。它取决于实现是否只是忽略了设置它的尝试,或者抛出异常。