prettier/tests/flow/this/This.js

61 lines
1.6 KiB
JavaScript

/* @providesModule This */
function F() { this.x = 0; }
F.prototype.m = function() { this.y = 0; }
function foo(p:string) { }
var o1 = new F(); // sets o1.x to 0
o1.x = "";
foo(o1.x); // ok by definite assignment
var o2 = new F();
o1.y = 0;
o2.y = "";
foo(o2.y); // setting o1.y to 0 has no effect on o2.y
var o3 = new F();
o3.m(); // sets o3.y to 0
o3.y = "";
foo(o3.y); // ok by definite assignment
foo(o2.y); // setting o3.y to 0 has no effect on o2.y
/*
* this bindings:
*/
/* standard functions may rebind this */
function f1() : number {
return this.x
}
var f1_1 = f1.bind({x: 0})(); // ok
var f1_2 : string = f1.bind({x: 0})(); // error, number -> string
var f1_3 = f1.bind({x: ""})(); // error, string -> number
// TODO make this error blame the call site, rather than the function body
var f1_4 = f1(); // error, (global object).x
/* arrow functions bind this at point of definition */
/* top level arrow functions bind this to global object */
var a1 = () => {
return this.x
}
var ax = a1(); // error, (this:mixed).x
/* nested arrows bind enclosing this (which may itself rebind) */
function f2() : number {
var a2 = () => { return this.x };
return a2()
}
var f2_1 = f2.bind({x: 0})(); // ok
var f2_2 : string = f2.bind({x: 0})(); // error, number -> string
var f2_3 = f2.bind({x: ""})(); // error, string -> number
// TODO make this error blame the call site, rather than the function body
var f2_4 = f2(); // error, (global object).x
(this: void);
module.exports = true;