| "use strict"; |
| |
| let global = this; |
| let p = {}; |
| let q = {}; |
| |
| let g1 = function() { |
| assertEq(this, undefined); |
| }; |
| g1(...[]); |
| |
| let g2 = x => { |
| assertEq(this, global); |
| }; |
| g2(...[]); |
| |
| let g3 = function() { |
| assertEq(this, p); |
| }; |
| g3.apply(p, ...[]); |
| g3.call(p, ...[]); |
| |
| g2.apply(p, ...[]); |
| g2.call(p, ...[]); |
| |
| let o = { |
| f1: function() { |
| assertEq(this, o); |
| |
| let g1 = function() { |
| assertEq(this, undefined); |
| }; |
| g1(...[]); |
| |
| let g2 = x => { |
| assertEq(this, o); |
| }; |
| g2(...[]); |
| |
| let g3 = function() { |
| assertEq(this, q); |
| }; |
| g3.apply(q, ...[]); |
| g3.call(q, ...[]); |
| |
| let g4 = x => { |
| assertEq(this, o); |
| }; |
| g4.apply(q, ...[]); |
| g4.call(q, ...[]); |
| }, |
| f2: x => { |
| assertEq(this, global); |
| let g1 = function() { |
| assertEq(this, undefined); |
| }; |
| g1(...[]); |
| |
| let g2 = x => { |
| assertEq(this, global); |
| }; |
| g2(...[]); |
| |
| let g3 = function() { |
| assertEq(this, q); |
| }; |
| g3.apply(q, ...[]); |
| g3.call(q, ...[]); |
| |
| let g4 = x => { |
| assertEq(this, global); |
| }; |
| g4.apply(q, ...[]); |
| g4.call(q, ...[]); |
| }, |
| f3: function() { |
| assertEq(this, p); |
| |
| let g1 = function() { |
| assertEq(this, undefined); |
| }; |
| g1(...[]); |
| |
| let g2 = x => { |
| assertEq(this, p); |
| }; |
| g2(...[]); |
| |
| let g3 = function() { |
| assertEq(this, q); |
| }; |
| g3.apply(q, ...[]); |
| g3.call(q, ...[]); |
| |
| let g4 = x => { |
| assertEq(this, p); |
| }; |
| g4.apply(q, ...[]); |
| g4.call(q, ...[]); |
| } |
| }; |
| o.f1(...[]); |
| o.f2(...[]); |
| o.f3.apply(p, ...[]); |
| o.f2.apply(p, ...[]); |