objectCreationOptimizations.js 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. //-------------------------------------------------------------------------------------------------------
  2. // Copyright (C) Microsoft. All rights reserved.
  3. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
  4. //-------------------------------------------------------------------------------------------------------
  5. // Constructor providers
  6. var nonNumeric = function()
  7. {
  8. return function()
  9. {
  10. this.a = 1;
  11. this.b = 2;
  12. this.c = 3;
  13. };
  14. }
  15. nonNumeric.myName = "Non-numeric";
  16. nonNumeric.prop = 'b';
  17. var numeric = function()
  18. {
  19. return function()
  20. {
  21. this.a = 1;
  22. this[9] = 2;
  23. this.c = 3;
  24. };
  25. }
  26. numeric.myName = "Numeric";
  27. numeric.prop = '9';
  28. var ctorProviders = [ nonNumeric, numeric ];
  29. // Property definers
  30. var doNothing = function(obj, prop) {}
  31. doNothing.myName = "No-op";
  32. var defineAccessor = function(obj, prop)
  33. {
  34. Object.defineProperty(obj, prop,
  35. {
  36. set:function(v) { WScript.Echo("SETTER: " + v); },
  37. get:function() { WScript.Echo("GETTER"); return "GETTERVALUE";}
  38. });
  39. }
  40. defineAccessor.myName = "Define accessor property";
  41. var defineNonWritable = function(obj, prop)
  42. {
  43. Object.defineProperty(obj, prop, { value:"NONWRITABLE", writable:false } );
  44. }
  45. defineNonWritable.myName = "Define non-writable property";
  46. var defineWritable = function(obj, prop)
  47. {
  48. Object.defineProperty(obj, prop, { value:"WRITABLE", writable:true } );
  49. }
  50. defineWritable.myName = "Define writable property";
  51. var definers = [doNothing, defineAccessor, defineNonWritable, defineWritable];
  52. var testId = 1;
  53. for (var i = 0; i < definers.length; i++)
  54. {
  55. var define = definers[i];
  56. for (var j = 0; j < ctorProviders.length; j++)
  57. {
  58. var provider = ctorProviders[j];
  59. var ctor = provider();
  60. WScript.Echo("Test " + testId++ + ": " + provider.myName + ", " + define.myName);
  61. var o = new ctor();
  62. print(o, provider.prop);
  63. define(ctor.prototype, provider.prop);
  64. o = new ctor();
  65. print(o, provider.prop);
  66. }
  67. }
  68. function print(o, prop)
  69. {
  70. WScript.Echo("a: " + o.a);
  71. WScript.Echo(prop + ": " + o[prop]);
  72. WScript.Echo("c: " + o.c);
  73. }