首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在coffeescript中将参数传递给"sub class“

如何在coffeescript中将参数传递给"sub class“
EN

Stack Overflow用户
提问于 2012-02-19 21:45:50
回答 1查看 307关注 0票数 0

我有以下代码,它在coffeescript (扩展数组原型)中定义了一个迭代器原型:

代码语言:javascript
运行
复制
App.Utils.Iterator = do ->
  Iterator =  ->
    Array.apply(this,arguments)
    ### this.push(i) for i in arguments : works but not good practice
    iter = 0
    @reset = ->
      iter = 0
    @getIndex = ->
      iter
    @getValue= ->
      this[iter]
    @next= ->
      this[++iter] if iter < this.length-1
    @previous= ->
      this[--iter] if iter>0
    @hasNext= ->
      return if this[iter+1] then true else return false
    @hasPrevious= ->
      return  if this[iter-1]then true else return false
    return this

  Iterator.prototype = new Array()
  Iterator.prototype.constructor = Array
  return Iterator

一切都很好,但是我想像数组一样实例化迭代器:

代码语言:javascript
运行
复制
iterator = new App.Utils.Iterator(1,2,3,4)

它在控制台上返回[]

如何让它像常规数组一样初始化我的迭代器( new Array( 1,2,3,4 )返回1,2,3,4)而不推入构造函数中的参数(指令在我的代码中已被注释)

谢谢

EN

回答 1

Stack Overflow用户

发布于 2012-02-23 04:40:04

你的代码中有几个设计错误,因为你试图创建的实体根本不是迭代器。迭代器是用来迭代现有数组或其他可迭代数据类型的东西-它不是迭代器本身。这就是为什么:

重置迭代器的一个合理参数是数组,不应该扩展Array

  • instead of
  1. ,只需为每次迭代创建一个新的实例

现在来回答你的问题。

首先,无需重新创建一堆Javascript样板,您的代码可以重写为:

代码语言:javascript
运行
复制
class Iterator extends Array
  constructor: ->
    iter = 0
    @reset = ->
      iter = 0
    @getIndex = ->
      iter
    @getValue = ->
      @[iter]
    @next = ->
      @[++iter] if iter < @length-1
    @previous = ->
      @[--iter] if iter > 0
    @hasNext = ->
      if @[iter+1] then true else false
    @hasPrevious = ->
      if @[iter-1] then true else false
    super

其次,为什么仅仅为了在动态命令式语言中“隐藏”一个变量而使事情过于复杂并引入开销呢?代码必须以以下形式重写:

代码语言:javascript
运行
复制
class Iterator extends Array
  constructor: ->
    @iter = 0
    super
  reset: ->
    @iter = 0
  getIndex: ->
    @[@iter]
  # ...

第三,向扩展数组传递参数列表是不可能的。这可能是一个与[]糖相关的javascript问题。您提出的在构造函数解决方案中推送参数的建议很好。如果你仍然坚持编写这样的类,考虑到你会犯的所有其他错误,我认为良好实践的问题无论如何都不应该困扰你。

另外,为什么有人需要在Coffeescript中使用迭代器,这是一个问题。我认为你最好先读一些关于Coffeescript的书,然后再开始编写一个你不会用到的库。试试this one

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9349709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档