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.



222
223
224
225
# File 'lib/javascript.rb', line 222

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



221
222
223
# File 'lib/javascript.rb', line 221

def args
  @args
end

#bodyObject

Returns the value of attribute body

Returns:

  • (Object)

    the current value of body



221
222
223
# File 'lib/javascript.rb', line 221

def body
  @body
end

#nameObject

Returns the value of attribute name

Returns:

  • (Object)

    the current value of name



221
222
223
# File 'lib/javascript.rb', line 221

def name
  @name
end

Instance Method Details

#apply(target = nil, arg_values) ⇒ Object



235
236
237
# File 'lib/javascript.rb', line 235

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

#arityObject



227
228
229
# File 'lib/javascript.rb', line 227

def arity
  args.length
end

#bind(target) ⇒ Object



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

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

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



231
232
233
# File 'lib/javascript.rb', line 231

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

#to_procObject



243
244
245
246
247
248
249
250
251
252
253
# File 'lib/javascript.rb', line 243

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