You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The following code prints [123] in a console, the advanced compiled code prints [].
Compilation command: java -jar compiler.jar --language_out ECMASCRIPT5 --js 'test.js' --compilation_level=ADVANCED
Compiler version: v20240317
// test.js
const Foo = class {
/** @param {!Array<number>=} opt_nums */
constructor(opt_nums){
/** @type {!Array<number>} */
this.nums_ = opt_nums || [];
}
/** @param {number} num */
add(num){
this.nums_.push(num);
}
/** @return {!Foo} */
clone(){
return new this.constructor(this.nums_.slice(0));
}
}
const f = new Foo();
f.add(123);
console.log(f.clone().nums_);
Compiled code: function a(){this.g=[]}a.prototype.add=function(e){this.g.push(e)};var b=new a;b.add(123);var c=console,d=c.log,f;f=new b.constructor(b.g.slice(0));d.call(c,f.g);
The opt_nums argument of a constructor is ignored in the compiled code.
The text was updated successfully, but these errors were encountered:
Yes, use the "constructor" property is considered reflection. If you would like to use it in that way you need to export or otherwise cause the constructor to "escape".
The following code prints [123] in a console, the advanced compiled code prints [].
Compilation command: java -jar compiler.jar --language_out ECMASCRIPT5 --js 'test.js' --compilation_level=ADVANCED
Compiler version: v20240317
Compiled code:
function a(){this.g=[]}a.prototype.add=function(e){this.g.push(e)};var b=new a;b.add(123);var c=console,d=c.log,f;f=new b.constructor(b.g.slice(0));d.call(c,f.g);
The opt_nums argument of a constructor is ignored in the compiled code.
The text was updated successfully, but these errors were encountered: