Class: JavaScript::Function

Inherits:
Struct
  • Object
show all
Defined in:
lib/javascript.rb

Direct Known Subclasses

BoundFunction

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeFunction

Returns a new instance of Function.



241
242
243
244
# File 'lib/javascript.rb', line 241

def initialize(*)
  @scope = JavaScript.current_scope
  super
end

Instance Attribute Details

#argsObject

Returns the value of attribute args

Returns:

  • (Object)

    the current value of args



240
241
242
# File 'lib/javascript.rb', line 240

def args
  @args
end

#bodyObject

Returns the value of attribute body

Returns:

  • (Object)

    the current value of body



240
241
242
# File 'lib/javascript.rb', line 240

def body
  @body
end

#nameObject

Returns the value of attribute name

Returns:

  • (Object)

    the current value of name



240
241
242
# File 'lib/javascript.rb', line 240

def name
  @name
end

Instance Method Details

#apply(target = nil, arg_values) ⇒ Object



254
255
256
# File 'lib/javascript.rb', line 254

def apply(target = nil, arg_values)
  call(target, *arg_values)
end

#arityObject



246
247
248
# File 'lib/javascript.rb', line 246

def arity
  args.length
end

#bind(target) ⇒ Object



258
259
260
# File 'lib/javascript.rb', line 258

def bind(target)
  BoundFunction.new(target, name, args, body)
end

#call(target = nil, *arg_values) ⇒ Object



250
251
252
# File 'lib/javascript.rb', line 250

def call(target = nil, *arg_values)
  ::Object.instance_method(:instance_exec).bind(target).call(*arg_values, &self)
end

#to_procObject



262
263
264
265
266
267
268
269
270
271
272
# File 'lib/javascript.rb', line 262

def to_proc
  parent_scope = @scope
  arg_names    = args.map(&:name)
  unwrapped    = body

  FunctionWrapper.new(arg_names) do |*arg_values|
    locals = Hash[ arg_names.zip(arg_values) ]
    locals[:arguments] = arg_values
    parent_scope.__spawn__(self, locals).__eval__(*arg_values, &unwrapped)
  end
end