使用CoffeeScript类扩展jQuery

时间:2012-03-07 10:47:40

标签: jquery coffeescript

我是CoffeeScript的新手,我喜欢CoffeeScript类,但是无法解决如何使用jQuery.prototype在jQuery中扩展它们。

这是我的应用程序的一部分,它包含各种全局状态变量,因此我想通过 $。myThing.myFunction()调用它,而不是通常的$ .fn.extend / $()。myThing()扩展方式。

我可以这样工作:

$ = jQuery
$.myThing = $.myThing || {}

$.extend $.myThing, {
  myProperty: 0
  myFunction: ->
}

哪个好,但是我不能把它当作一个类,结构看起来不太像我的pycharm。 (诚​​然,这可能比整个课程更令人烦恼......)

我想要的是做这样的事情:

$ = jQuery
$.myThing = $.myThing || {}

class myThing
  myProperty: 0
  myFunction: ->

$.extend $.myThing, myThing()

但它不起作用(除了在pycharm中看起来很漂亮)。有更好的方法吗?

2 个答案:

答案 0 :(得分:2)

这对你有用吗?

class jQuery.myThing
  myProperty: 0
  myFunction: ->

编译为:

jQuery.myThing = (function() {

  function myThing() {}

  myThing.prototype.myProperty = 0;

  myThing.prototype.myFunction = function() {};

  return myThing;

})();

编辑: $.myThing作为班级的实例:

class myThing
  myProperty: 0
  myFunction: ->

jQuery.myThing = new myThing

答案 1 :(得分:0)

我希望我的jquery方法像常规的jQuery扩展一样 - 是一个jQuery对象,包含所有jQuery方法,例如each,html等等 - 但也要具有我的类的属性。这是我的解决方案:

Object.prototype.extend = (klass)->
  for key, value of klass::
    @[key] = value

class MyClass
  myclassmethod: ->

$.fn.myjqextension = ()->
  @extend MyClass
  @myclassmethod()

请参阅:https://github.com/jashkenas/coffee-script/issues/452

http://jimmycuadra.com/posts/coffeescript-classes-under-the-hood