superSetProperty.js (1374B)
1 class Base 2 { 3 set setter(val) { 4 this.set_val = val; 5 this.set_this = this; 6 } 7 } 8 Base.prototype.prop = "Base"; 9 10 class Derived extends Base 11 { 12 set setter(val) { super.setter = val; } 13 setelem(pname, val) { super[pname] = val; } 14 } 15 16 // Test SETPROP_SUPER invoke setters correctly 17 function testSetterChain() { 18 let d = new Derived(); 19 20 for (let i = 0; i < 10; ++i) 21 { 22 d.setter = i; 23 assertEq(d.set_val, i); 24 assertEq(d.set_this, d); 25 } 26 } 27 function testSetterChainElem() { 28 let d = new Derived(); 29 30 for (let i = 0; i < 10; ++i) 31 { 32 d.setelem("setter", i); 33 assertEq(d.set_val, i); 34 assertEq(d.set_this, d); 35 } 36 } 37 38 // Test that SETPROP_SUPER modifies |this| and not home object 39 function testSuperSetProp() { 40 let d = new Derived(); 41 42 for (let i = 0; i < 10; ++i) 43 { 44 d.prop = i; 45 assertEq(d.prop, i); 46 assertEq(d.hasOwnProperty("prop"), true); 47 assertEq(Derived.prototype.prop, "Base"); 48 } 49 } 50 function testSuperSetPropElem() { 51 let d = new Derived(); 52 53 for (let i = 0; i < 10; ++i) 54 { 55 d.setelem("prop", i); 56 assertEq(d.prop, i); 57 assertEq(d.hasOwnProperty("prop"), true); 58 assertEq(Derived.prototype.prop, "Base"); 59 } 60 } 61 62 testSetterChain(); 63 testSetterChainElem(); 64 65 testSuperSetProp(); 66 testSuperSetPropElem();