代码之家  ›  专栏  ›  技术社区  ›  Georg Fritzsche

在可编写脚本的浏览器插件中处理只读/写只读属性的最佳方法

  •  0
  • Georg Fritzsche  · 技术社区  · 16 年前

    编写一个可通过JavaScript编写脚本的嵌入式跨浏览器插件,我不确定如何以最佳方式处理只读和只读属性。

    • 在写入时以静默方式放弃只读和
    • 返回仅写的伪值

    建议?或者像flash这样的广泛使用的插件有什么好的例子吗?

    更新:
    我对只写属性是否有用不感兴趣——我不喜欢这个想法,但出于历史原因,我必须支持它。

    2 回复  |  直到 16 年前
        1
  •  2
  •   Warren Young    16 年前

    现行做法如下 Postel's Law :“做事要保守;在接受别人的东西时要开明。”

    正如人们经常编写糟糕的HTML一样,您的一些用户可能会向您传递糟糕的输入。假设您有一个布尔属性,记录为“真”或“假”。如果你得到1或0呢?它应该崩溃,还是只是应付?波斯特尔定律说,应对。如果你得到-1呢?同样,通过选择使用C的规则,非零是“真”来应对。说到你的具体问题,如果布尔属性被记录为只读,并且有人给了它一个值,那么你的插件应该把它吃掉。

    所有这些特殊情况处理意味着为您编写更多的代码,但使您的插件更易于使用,因此更可能受到欢迎。

    Postel定律的另一半意味着只读属性应该只有文档化的值。同样,以布尔属性为例:如果您的文档说该值为“true”或“false”,则永远不要返回“1”,即使JavaScript认为这是一个真实值。遵循您自己的规范,即使您编写的代码允许其他人违反它而不受惩罚。

    顺便说一下,我不喜欢只写属性的想法。您应该改为使用这些函数。即:

    pluginInstance.setWriteOnlyProperty(5);
    

    不是:

    pluginInstance.writeOnlyProperty = 5;
    

    只读变量是很容易理解的东西。只写变量很少出现。我唯一一次看到它是在一个小的8位微控制器中,原因很清楚,因为硬件设计。我看不出在软件领域有这么好的借口。

        2
  •  1
  •   Kev    16 年前

    我不会默默地丢弃值,即使您在文档中非常清楚地说明了这一点。如果语句没有返回任何类型的错误,那么它看起来应该有效果。如果您得到一条清晰的错误消息(“属性x是只读的”),那么调试就更容易了。

    不过,就只写函数而言,我同意Warren Young的回答。仅写属性是不直观的。