Source code
Revision control
Copy as Markdown
Other Tools
"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, ...[]);