Folded:
instances_counter = 0
module.exports = (-> __constructor = (-> if @ instanceof __constructor then @constructor.apply(@,Array.prototype.slice.call(arguments)) else new (Function.prototype.bind.apply(__constructor,[null].concat(Array.prototype.slice.call(arguments))))); __constructor.prototype = @; __constructor).apply
constructor: (@param1,@param2) ->
console.log "cnstar"
@id = ++instances_counter
render: ->
console.log @,instances_counter,@ instanceof module.exports
Unfolded:
instances_counter = 0
module.exports = (
->
__constructor = (->
__args = Array.prototype.slice.call(arguments)
if @ instanceof __constructor
@constructor.apply(@,__args)
else
new (Function.prototype.bind.apply(__constructor,[null].concat(__args)))
);
__constructor.prototype = @;
__constructor).apply
constructor: (@param1,@param2) ->
console.log "cnstar"
@id = ++instances_counter
render: ->
console.log @,instances_counter,@ instanceof module.exports
Testing:
Class2 = require './class2'
a = Class2('a1','a2')
b = new Class2('b1','b2')
a.render()
b.render()
console.log a instanceof Class2
console.log b instanceof Class2
Output:
$ coffee class3.coffee
cnstar
cnstar
{ param1: 'a1', param2: 'a2', id: 1 } 2 true
{ param1: 'b1', param2: 'b2', id: 2 } 2 true
true
true