diff --git a/vlib/v/gen/js/builtin_types.v b/vlib/v/gen/js/builtin_types.v index 334123af40..cec9dff347 100644 --- a/vlib/v/gen/js/builtin_types.v +++ b/vlib/v/gen/js/builtin_types.v @@ -308,12 +308,22 @@ fn (mut g JsGen) gen_builtin_prototype(c BuiltinPrototypeConfig) { g.writeln('$c.extras,') } - g.writeln('valueOf() { return $c.value_of },') - g.writeln('toString() { return $c.to_string },') - // g.writeln('eq(other) { return $c.eq },') - g.writeln('\$toJS() { return $c.to_jsval }, ') - if c.has_strfn { - g.writeln('str() { return new string(this.toString()) }') + if g.pref.output_es5 { + g.writeln('valueOf: (function() { return $c.value_of }).bind(this),') + g.writeln('toString: (function() { return $c.to_string }).bind(this),') + g.writeln('\$toJS: (function() { return $c.to_jsval }).bind(this), ') + if c.has_strfn { + g.writeln('str: (function() { return new string(this.toString())).bind(this) }') + } + // g.writeln('eq: (function(other) { return $c.eq }).bind(this),') + } else { + g.writeln('valueOf() { return $c.value_of },') + g.writeln('toString() { return $c.to_string },') + g.writeln('\$toJS() { return $c.to_jsval }, ') + if c.has_strfn { + g.writeln('str() { return new string(this.toString()) }') + } + // g.writeln('eq(other) { return $c.eq },') } g.dec_indent() g.writeln('};\n') diff --git a/vlib/v/gen/js/js.v b/vlib/v/gen/js/js.v index ec3272885c..dc830c4e7c 100644 --- a/vlib/v/gen/js/js.v +++ b/vlib/v/gen/js/js.v @@ -1914,7 +1914,11 @@ fn (mut g JsGen) gen_struct_decl(node ast.StructDecl) { // gen toString method fn_names := fns.map(it.name) if 'toString' !in fn_names { - g.writeln('toString() {') + if g.pref.output_es5 { + g.writeln('toString: (function() {') + } else { + g.writeln('toString() {') + } g.inc_indent() g.write('return `$js_name {') for i, field in node.fields { @@ -1930,7 +1934,11 @@ fn (mut g JsGen) gen_struct_decl(node ast.StructDecl) { } g.writeln('}`') g.dec_indent() - g.writeln('},') + if g.pref.output_es5 { + g.writeln('}).bind(this),') + } else { + g.writeln('},') + } } for field in node.fields { typ := g.typ(field.typ) @@ -1946,8 +1954,11 @@ fn (mut g JsGen) gen_struct_decl(node ast.StructDecl) { g.writeln(',') } } - g.writeln('\$toJS() { return this; }') - + if g.pref.output_es5 { + g.writeln('\$toJS: (function() { return this; }).bind(this)') + } else { + g.writeln('\$toJS() { return this; }') + } g.writeln('};\n') g.dec_indent()