我是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中看起来很漂亮)。有更好的方法吗?
答案 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