ich versuche, dieses Stück Code zum Laufen zu bringen:Closure Compiler gilt nicht @const auf diese
/** @constructor */
function Foo()
{
/** @const */
this.bar = 5;
// edit: does now work
// this.bar = 3;
}
var f = new Foo();
// should be inlined (like other constants)
alert(f.bar);
Ich habe bereits versucht, mehr Anmerkungen hinzugefügt (Typen, Konstruktor), @enum
statt @const
(für this.bar
), me = this
, die alle keine Wirkung hatten.
Die help page war nicht wirklich hilfreich dabei.
Gibt es einen Weg, um das zu erreichen? Wenn nicht, warum?
Wenn vorangestellt mit der" @ const "Annotation wird eine Variable inline (bekannt als [konstante Propagation] (http: //en.wikipedia.org/wiki/Constant_propagation)) durch den Closure Compiler, der für normale 'var'-Zustände gut funktioniert.Das ist das Verhalten, das ich mit Eigenschaften zu reproduzieren versuche.Es hat etwas mit dem Prozess zu tun, den du beschrieben hast – copy
Wie gesagt, der Compiler hat keine Unterstützung dafür. Es prüft @const-Annotationen auf Klasseneigenschaften, wenn es möglich ist, aber es ist konservativer, diese Informationen bei der Optimierung tatsächlich zu verwenden. – John
Ich spielte mit dem Compiler ein bisschen mehr herum, dachte aber, dass du recht hast; Es scheint keinen Weg zu geben, dies zu tun. Jedenfalls benutze ich jetzt cpp. – copy