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
[ ]
 

P.S. Присылайте криптовалюту если вам нравится то, что я делаю.
Если не нравится - тоже присылайте.
LTC (Litecoin): LLN6X2uV1iuQ1e4tdmQZsf2RRwh4pxPSej

Leave a Reply

*