| //------------------------------------------------------------------------------------------------------- |
| // Copyright (C) Microsoft. All rights reserved. |
| // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. |
| //------------------------------------------------------------------------------------------------------- |
| |
| var o = new Object(); |
| |
| WScript.Echo("*** Setting data property ***"); |
| o.x = 23; |
| WScript.Echo("o.x=" + o.x); |
| |
| WScript.Echo("*** Setting data property using defineProperty ***"); |
| Object.defineProperty(o, "x", { value : 24 }); |
| WScript.Echo("o.x=" + o.x); |
| |
| WScript.Echo("*** Setting accessor property using defineProperty ***"); |
| var x = ""; |
| var z = ""; |
| Object.defineProperty(o, "x", { |
| get : function() { WScript.Echo("Getter called"); return x; }, |
| set : function(val) { WScript.Echo("Setter called"); z = 1000; x = val; } |
| }); |
| o.x = 25; |
| WScript.Echo("o.x=" + o.x); |
| WScript.Echo("x=" + x); |
| WScript.Echo("z=" + z); |
| WScript.Echo("*** Setting backing store for accessor ***"); |
| x = 26; |
| WScript.Echo("o.x=" + o.x); |
| |
| var ab = new Object(); |
| Object.defineProperty(ab,"foo",{get:function(){WScript.Echo("In getter");}, configurable: true}); |
| Object.defineProperty(ab,"foo",{set:function(arg){WScript.Echo("In setter");}}); |
| ab.foo; |
| ab.foo = 10; |
| |
| delete ab.foo; |
| |
| try |
| { |
| var ab = new Object(); |
| Object.defineProperty(ab,"foo",{get:function(){WScript.Echo("In getter");}}); |
| ab.foo; |
| ab.foo = 10; |
| } |
| catch(e) |
| { |
| WScript.Echo(e.description); |
| } |
| |
| delete ab.foo; |
| |
| try |
| { |
| var ab = new Object(); |
| Object.defineProperty(ab,"foo",{set:function(arg){WScript.Echo("In setter");}}); |
| WScript.Echo(ab.foo); |
| ab.foo = 10; |
| } |
| catch(e) |
| { |
| WScript.Echo(e.description); |
| } |
| |
| delete ab.foo; |
| |
| var o = {}; |
| |
| o.a = 1; |
| o.b = 2; |
| o.c = 3; |
| o.d = 4; |
| o.e = 5; |
| o.f = 6; |
| o.g = 7; |
| o.h = 8; |
| o.i = 9; |
| o.j = 10; |
| o.k = 11; |
| o.l = 12; |
| o.m = 13; |
| o.n = 14; |
| o.o = 15; |
| o.p = 16; |
| o.q = 17; |
| |
| Object.defineProperty(o, "qqq", |
| { |
| set: function () { }, |
| get: function() { WScript.Echo("get"); } |
| }); |
| |
| WScript.Echo(o.qqq); |
| delete o.qqq; |
| |
| // prototype setter/getter |
| |
| function Point() { |
| this.x=0; |
| this.y=0; |
| } |
| |
| Point.prototype = { |
| print:function() { WScript.Echo("x:"+this.x+", y:"+this.y+", z:"+this.z); } |
| }; |
| |
| Object.defineProperty(Point.prototype,"z",{ set:function(v) { this._z=v; }, get: function() { return this._z; }}); |
| var pt=new Point(); |
| pt.z=12; |
| pt.print(); |
| |
| Object.defineProperty(this, "abc", |
| { |
| set: function () { }, |
| get: function() { WScript.Echo("get global"); } |
| }); |
| WScript.Echo(abc); |
| delete this.abc; |
| |
| (function () { |
| WScript.Echo("*** Getters, prototypes, and deleting properties ***"); |
| |
| function A() { }; |
| A.prototype = { |
| get p () { return this._p; }, |
| set p (v) { this._p = v; } |
| }; |
| var o = new A(); |
| o.p; |
| delete A.prototype.p; |
| o.p; |
| WScript.Echo(o.p); |
| WScript.Echo(A.prototype.p); |
| })(); |
| |
| (function () { |
| WScript.Echo("*** Setters, prototypes, and deleting properties ***"); |
| |
| function A() { }; |
| A.prototype = { |
| get p () { return this._p; }, |
| set p (v) { this._p = v; } |
| }; |
| var o = new A(); |
| o._p = undefined; // create the property to stop the setter from changing the type |
| o.p = 1; |
| delete A.prototype.p; |
| o.p = 2; |
| WScript.Echo(o.p); |
| WScript.Echo(A.prototype.p); |
| })(); |