【问题标题】:How do I create and use an interface using: interface, dictionary and constructors?如何使用接口、字典和构造函数创建和使用接口?
【发布时间】:2023-04-02 18:43:01
【问题描述】:

我正在尝试设计一个易于使用且具有高可用性的界面(即它会帮助您不输入错误信息)。

我看过 Tizen web-api 的文档,我真的很喜欢这个结构。我想不通的是。是关于页面实现的信息还是只是文档?这是一个示例:ContactNameContactNameInit

ContactName 是一个您可以在 javascript 中创建的对象,ContactNameInit 可以轻松创建。要创建 ContactName,您可以编写 var name = new ContactName({firstname: "james"});,这将创建属性 firstname 为 james 的对象。

该方法使用定义的类型/类和(如果文档是实现)简单使用interface 字。

这是我认为唯一值得实现的接口示例。我发现了一些链接,其中接口是通过创建的对象实现的,在我看来这不是接口,以及其他看起来错误的替代方案(尽管它们可能是正确的方式?)。示例:Interface in JavascriptObject oriented Javascript

我想实现以下(此代码不起作用): (Tizen web-api Contact 的功能副本)

dictionary CarInit{
    DOMString model;
    // more attributes etc.
}

[Constructor(optional CarInit? carInitDict), Constructor(DOMString stringRepresentation)]
interface Car{
    attribute DOMString? model;
    // more attributes and methods, foo() for example.
}

我是否需要在我的 API 中实现更多内容才能使此代码正常工作?我可以让这段代码工作,还是只是文档?

在 Tizens 页面上有很多 ´type´? 这意味着需要输入类型。这是 javascript 标准、文档还是他们使用的东西?

如果以上所有这些都是错误的。 达到预期效果的最简单方法是什么?我想要的主要问题是对象的构造函数,以便您可以编写:var foo = new bar({foobie:value, barbie:value}) 等。

【问题讨论】:

  • “我想实现以下”之后的代码块不是 JavaScript 或任何接近它的东西。它可能是某种形式的 IDL。
  • 这也是我最初的想法,但后来我看到了 Tizen 文档。这就是全部吗?文档易于阅读?如果是,为什么要使用伪代码 javascript?
  • @Yokich:正如我所说,它可能是某种形式的 IDL,但它与 JavaScript 无关。 IDL 具有实用性,因为它允许您以独立于语言的方式表达这些内容(就像 DOM 和 HTML5 规范对 DOM API 所做的那样)。这对于文档和自动化(例如,为符合 IDL 的对象自动生成代码框架)很有用。但是 JavaScript 没有内置任何类似的东西,这是一个单独的东西。
  • 感谢您的意见。我将立即开始实施我的鸭子分析器

标签: javascript interface


【解决方案1】:

JavaScript 根本没有接口。接口的常用方法是将文档与“鸭子类型”相结合——例如,API 接受一个对象并提供该对象“像鸭子一样走路和像鸭子一样说话”(具有相关的方法和/或属性), API 对那个对象很满意。

如果您想使用强类型,JavaScript 不适合您。您可能会考虑TypeScript,它是一种基于 JavaScript 构建的语言,它添加了类型,然后被“编译”成 JavaScript 以进行部署(例如,它可以在支持 JavaScript 的浏览器和其他环境中运行)。但这对您的效果如何取决于您发布 API 的方式以及使用方式。

另一种选择是为您的 API 设置“开发者”模式,在其中对对象进行大量检查以确保它们符合预期的一组方法和属性,然后是“发布”或“运行时”模式它假设一切都会好起来的(以避免检查的运行时性能损失)。

【讨论】:

  • 我认识并承认“鸭子打字”,我以前见过。我想我可以以这样一种方式创建构造函数,它(可能使用一些帮助函数)检查一个对象作为“walks”和“talks”的参数 - 它应该可以工作。我只是认为 Tizen 的文档所做的看起来像是一个简单的解决方案。您介意看看“Tizen web-api Contact”链接,看看您能找到什么吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-20
  • 1970-01-01
  • 1970-01-01
  • 2017-10-04
  • 2017-11-25
  • 1970-01-01
  • 2017-04-07
相关资源
最近更新 更多