我已经阅读了大量有关原型的材料,并大致了解了继承。然而,这是一件困扰我的事情,我无法弄清楚。
在dmitrysoshnikov.com 上有一个简化的示例,说明如何使用以下代码段实现原型继承:
// Generic prototype for all letters.
let letter = {
getNumber() {
return this.number;
}
};
let a = {number: 1, __proto__: letter};
let b = {number: 2, __proto__: letter};
// ...
let z = {number: 26, __proto__: letter};
console.log(
a.getNumber(), // 1
b.getNumber(), // 2
z.getNumber(), // 26
);Run Code Online (Sandbox Code Playgroud)
下面是这张图
然而,当我们开始使用实际的继承构造(使用 new 关键字)时,它开始看起来像这样:
我明白它是如何工作的。我不明白的是为什么突然我们需要所有子实例都继承自的 Letter.prototype 对象,而不是像上面的第一个图那样拥有它。对我来说,第一个例子似乎没有任何问题。
我能想到的一个潜在原因是实际方法允许在类中实现静态方法/属性。在上面的示例中,如果您要添加一个静态方法,那么它将是一个添加到 Letter 对象而不是 Letter.prototype 对象的函数。子对象 (a,b,z) 将无法访问该函数。在第一个示例中,这种功能必须以不同的方式实现,但我仍然认为这不是创建新 Prototype 对象的充分理由。我认为这个静态方法功能可以在没有它的情况下实现。
我错过了什么吗?
我认为有很多人试图解释我很感激的事情,但我不确定我的问题为什么 javascript 运行时被设计为以一种方式而不是另一种正确理解的方式运行。 …
我按照说明使用 swagger-jsdoc 为现有节点 API 设置了 swagger 文档。swagger.json 已正确提供,我在 index.html 中 SwaggerUiBundle 的 url 参数中添加了它的路径,如下所示:
const ui = SwaggerUIBundle({
url: "https://my.domain:5292/swagger.json",
dom_id: '#swagger-ui',
presets: [
SwaggerUIBundle.presets.apis,
SwaggerUIStandalonePreset
],
plugins: [
SwaggerUIBundle.plugins.DownloadUrl
],
layout: "StandaloneLayout" })
Run Code Online (Sandbox Code Playgroud)
但是,在浏览器中打开页面时,它尝试做的第一件事是显示默认的http://petstore.swagger.io/v2/swagger.json而不是我的swagger.json。它实际上失败了,因为我通过 https 提供页面,而 petstore 不是 https,但那是另一回事......
将我的地址手动输入到页面上的表单中的swagger.json中,可以按预期工作。它正确显示 API 页面并对其进行验证。但是,我不想总是在那里重新输入地址,并希望将其作为默认地址。