//------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- // Constructor providers var nonNumeric = function() { return function() { this.a = 1; this.b = 2; this.c = 3; }; } nonNumeric.myName = "Non-numeric"; nonNumeric.prop = 'b'; var numeric = function() { return function() { this.a = 1; this[9] = 2; this.c = 3; }; } numeric.myName = "Numeric"; numeric.prop = '9'; var ctorProviders = [ nonNumeric, numeric ]; // Property definers var doNothing = function(obj, prop) {} doNothing.myName = "No-op"; var defineAccessor = function(obj, prop) { Object.defineProperty(obj, prop, { set:function(v) { WScript.Echo("SETTER: " + v); }, get:function() { WScript.Echo("GETTER"); return "GETTERVALUE";} }); } defineAccessor.myName = "Define accessor property"; var defineNonWritable = function(obj, prop) { Object.defineProperty(obj, prop, { value:"NONWRITABLE", writable:false } ); } defineNonWritable.myName = "Define non-writable property"; var defineWritable = function(obj, prop) { Object.defineProperty(obj, prop, { value:"WRITABLE", writable:true } ); } defineWritable.myName = "Define writable property"; var definers = [doNothing, defineAccessor, defineNonWritable, defineWritable]; var testId = 1; for (var i = 0; i < definers.length; i++) { var define = definers[i]; for (var j = 0; j < ctorProviders.length; j++) { var provider = ctorProviders[j]; var ctor = provider(); WScript.Echo("Test " + testId++ + ": " + provider.myName + ", " + define.myName); var o = new ctor(); print(o, provider.prop); define(ctor.prototype, provider.prop); o = new ctor(); print(o, provider.prop); } } function print(o, prop) { WScript.Echo("a: " + o.a); WScript.Echo(prop + ": " + o[prop]); WScript.Echo("c: " + o.c); }