// 'this' is lexically scoped in arrow functions

var obj = {
    f: function (expected) {
        assertEq(this, expected);
        return a => this;
    }
};

var g = obj.f(obj);
assertEq(g(), obj);

var obj2 = {f: obj.f};
var g2 = obj2.f(obj2);
assertEq(g2(), obj2);
assertEq(g(), obj);