提问者:小点点

如何将一个semi类移动到它自己的文件中?


现在我在一个文件中有下面的内容,并且希望将clock函数/类移动到它自己的文件中。

我不知道该怎么称呼它,因为我认为它是一个函数,但是带有一些类特性。

如果我改变

var Clock = function(options) {

module.exports = (options) => {

后来呢

var Clock = require('./functions/clock')
var timer = new Clock({delay: options.checkInterval});

然后我得到

TypeError: Clock is not a constructor

有没有人知道如何将这个函数移动到它自己的文件中,所以我有index.jsfunctions/clock.js

var Clock = function(options) {
  var timer, offset, clock, interval

  options = options || {}
  options.delay = options.delay || 1000

  reset()

  function start() {
    if (!interval) {
      offset = Date.now()
      interval = setInterval(update, options.delay)
    }
  }

  function update() {
    clock += delta()
  }

  function delta() {
    var now = Date.now(),
    d = now - offset;
    offset = now;
    return d;
  }

  function stop() {
    if (interval) {
      clearInterval(interval)
      interval = null
    }
  }

  function reset() {
    clock = 0
  }

  function read() {
    return clock
  }

  this.start = start
  this.stop  = stop
  this.reset = reset
  this.read  = read
}

// all the following should not be moved
...
var timer = new Clock({delay: options.checkInterval});
...

共1个答案

匿名用户

看到您的导出,似乎您正在导出一个箭头函数,不幸的是,我们不能将箭头函数用于构造函数调用(即,我们不能将new用于它们),因为它们没有[[Construct]]方法。 因此,箭头函数也不存在prototype属性。

所以只要把你的箭头函数改成正常函数,你就可以走了。

var Clock = function(options) {
  var timer, offset, clock, interval

  options = options || {}
  options.delay = options.delay || 1000

  reset()

  function start() {
    if (!interval) {
      offset = Date.now()
      interval = setInterval(update, options.delay)
    }
  }

  function update() {
    clock += delta()
  }

  function delta() {
    var now = Date.now(),
    d = now - offset;
    offset = now;
    return d;
  }

  function stop() {
    if (interval) {
      clearInterval(interval)
      interval = null
    }
  }

  function reset() {
    clock = 0
  }

  function read() {
    return clock
  }

  this.start = start
  this.stop  = stop
  this.reset = reset
  this.read  = read
}
  module.exports = Clock;