不复制JavaScript原型

时间:2012-08-20 18:58:40

标签: javascript node.js coffeescript

出于某种原因,我用CoffeeScript编写的类不会复制原型。

这是我正在使用的确切代码:

module.exports = class ListQueue
  constructor: ->
    @queue = []
    @queueIds =[]
    @currentId = 0

  # Adds the given element to the queue.
  # Returns the index of the element.
  add: (el) ->
    @queueIds.push @currentId
    @queue.push el
    @currentId++ # return @lastIndex, then increment

  shift: ->
    @queueIndexes.shift()
    @queue.shift()

  # Returns the index in the @queue array for the given id.
  queueIndex: (id) ->
    for queueIndex, i in queueIndexes
      if queueIndex is id
        return i
    undefined

  get: (id) ->
    index = @queueIndex id
    @queue[index]

  length: ->
    @queue.length

  remove: (id) ->
    index = @queueIndex id
    if index?
      @queueIds = @queueIds.slice index, index
      @queue = @queue.slice index, index
      true
    else
      false

这是该课程的原型,正如所料:

  { add: [Function],
  shift: [Function],
  queueIndex: [Function],
  get: [Function],
  length: [Function],
  remove: [Function] }

但这很奇怪:new ListQueue实际上给了我这个:

  { queue: [], queueIds: [], currentId: 0 }

我正在使用Node.JS 0.8.7。

1 个答案:

答案 0 :(得分:3)

如果执行

,do函数实际上就在那里
new Test().do()

你会得到“测试”

如果您需要intellisense类型支持,请先尝试添加构造函数。它将创建函数变量并绑定它们,如下所示:

this.LoadData = __bind(this.LoadData, this);

这将允许您明确地调用它们。