如何在 JavaScript 中直接访问 Coordinates 构造函数?

How can I access the Coordinates constructor directly in JavaScript?

Vue 中的类型检查要求将构造函数作为类型传入:

props: {
  coords: {
    type: Coordinates,
    required: true,
  },
},

我不知道如何找到 Coordinates 构造函数。不能使用 Object 因为它不继承任何东西,并且不希望只允许任何东西。

MDN 上没有关于如何直接访问它的内容:https://developer.mozilla.org/en-US/docs/Web/API/Coordinates

有什么想法吗?

编辑:澄清一下,window.Coordinates 未定义。上面的代码示例不起作用。

您需要使用自定义验证器检查该值是否是构造函数的实例:

coords {
  validator: function (value) {
      return value instanceOf Coordinates; // Coordinates is a constructor in your case
  }
}

查看 HTML5 Geolocation 文档。

我也在处理这个问题。我的解决方案是定义一个伪构造函数:

function Coordinates () {}
Coordinates.prototype = Object.prototype

在vue组件中

props: {
  coords: {
    type: Coordinates
  }
}

这会起作用,因为 Vue 使用 instanceof 来验证自定义类型。

Coordinates 而不是 暴露在浏览器中供网络开发人员使用的东西。它是由 W3C 地理规范定义的接口,适用于实现地理定位功能的 浏览器供应商 。接口描述了某种类型的数据结构的外观。例如下例中的coords

navigator.geolocation.getCurrentPosition(function (pos) {
  var coords = pos.coords
  console.log(coords)
})

即使您可以使用以下代码检索 Coordinates 的文字。它只是一个对象(是的,它是原型,不是构造函数),你几乎不能做任何事情。

Object.getPrototypeOf(pos.coords)

这里有两点:

  1. Coordinates 不适用于网络开发人员。
  2. Coordinates 甚至不是函数。

我猜唯一的方法是define your own validator并检查输入值是否满足您的要求。这会更容易,因为 Coordinates 有一个特殊的 toString() 符号:

props: {
  coords: {
    validator: function (value) {
      return value.toString() === '[object Coordinates]'
    }
  }
}

但是,如果您 hand-craft 您自己的坐标数据,此验证器可能会失败。更通用的方法是 duck-typing,只需检查它是否具有您需要的适当属性,通常是 latitudelongitude