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

时间:2016-10-31 12:13:47

标签: javascript browser vue.js w3c-geolocation

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

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

我无法找到如何找到Coordinates构造函数。无法使用Object,因为它不会从任何内容继承,并且不希望只允许任何内容。

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

有什么想法吗?

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

3 个答案:

答案 0 :(得分:2)

Coordinates 在浏览器中公开以供Web开发人员使用的内容。它是由W3C地理规范定义的接口,用于实现地理定位功能的浏览器供应商。接口描述了某种类型的数据结构的外观。例如,以下示例中为coords

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

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

Object.getPrototypeOf(pos.coords)

这里有两点:

  1. Coordinates不适合网络开发者。
  2. Coordinates甚至不是一个功能。
  3. 我猜的唯一方法是define your own validator并检查输入值是否符合您的要求。这会更容易,因为Coordinates有一个特殊的toString()符号:

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

    但是,如果您手工制作自己的coords数据,此验证器可能会失败。更通用的方法就像鸭子打字一样,只需检查它是否具有您需要的适当属性,通常是latitudelongitude

答案 1 :(得分:0)

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

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

查看HTML5 Geolocation文档。

答案 2 :(得分:0)

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

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

在vue组件中

props: {
  coords: {
    type: Coordinates
  }
}

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