FunctionConstructor.cs 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using Jint.Native;
  4. using Jint.Native.Function;
  5. using Jint.Native.Object;
  6. using Jint.Parser.Ast;
  7. using Jint.Runtime.Descriptors;
  8. using Jint.Runtime.Environments;
  9. namespace Jint.Runtime
  10. {
  11. /// <summary>
  12. ///
  13. /// </summary>
  14. public class FunctionConstructor : FunctionInstance
  15. {
  16. private readonly Engine _engine;
  17. private readonly IEnumerable<Identifier> _parameters;
  18. public FunctionConstructor(Engine engine)
  19. : base(engine, engine.RootFunction, null, null)
  20. {
  21. _engine = engine;
  22. // http://www.ecma-international.org/ecma-262/5.1/#sec-13.2
  23. Extensible = true;
  24. }
  25. public override dynamic Call(object thisObject, dynamic[] arguments)
  26. {
  27. return Construct(arguments);
  28. }
  29. public virtual ObjectInstance Construct(dynamic[] arguments)
  30. {
  31. var instance = new FunctionShim(_engine, Prototype, null, null);
  32. instance.DefineOwnProperty("constructor", new DataDescriptor(Prototype) { Writable = true, Enumerable = false, Configurable = false }, false);
  33. return instance;
  34. }
  35. }
  36. }