0

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

是更常见还是更直观

  • 以只读方式在写入时静默丢弃值,并且
  • 返回只写的虚拟值

或者

  • 指示浏览器失败,很可能导致脚本错误

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

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

4

2 回答 2

2

现有的做法遵循Postel 定律:“在你所做的事情上保持保守;在你从他人那里接受的事情上保持自由。”

在这种情况下,这意味着您的插件文档应该显示正确的用法,但它应该容忍使用不当。通过研究 HTML 与之前或之后发明的所有其他超文本系统的成功,这种方法的智慧应该是显而易见的。大多数失败都是非常束缚和纪律风格的设计,其中最小的错误导致文档无法阅读。

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

所有这些特殊情况处理意味着您需要更多的编码,但使您的插件更易于使用,因此更有可能流行。

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

顺便说一句,我不喜欢只写属性的想法。您应该改为使用这些功能。那是:

pluginInstance.setWriteOnlyProperty(5);

不是:

pluginInstance.writeOnlyProperty = 5;

只读变量是很好理解的东西。只写变量很少见。我见过的唯一一次是在一个小的 8 位微控制器中,由于硬件设计,原因很清楚。我认为软件中没有这么好的借口。

于 2009-10-09T20:16:42.377 回答
1

即使您在文档中说得很清楚,我也不会默默地丢弃值。一条不返回任何错误的语句使它看起来应该有效果。如果您收到明确的错误消息(“属性 x 是只读的”),则调试起来会更容易。

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

于 2009-10-09T20:54:06.587 回答