Das utopische Ziel:Getter auf die Instanz einer JavaScript-Funktion selbst, um Docstrings zu aktivieren. Ist es möglich?
str = "hello"
str.doc = "this is a string"
console.log(str) //prints 'hello'
console.log(str.doc) //should prints the docstring
jedoch Strings sind unveränderlich und diese oben ist nicht möglich.
Wie ich zu umgehen versucht:
str = new String("hello")
str.doc = "this is a string"
console.log(str) //prints the string object but not 'hello'
console.log(""+str) //prints "hello"
console.log(str.doc) //correctly prints the docstring
Wie Sie nur, wenn .valueOf() oder .toString() sehen kann, genannt Sie den rohen String bekommen. Das Ziel ist, die Zeichenfolge zu erhalten, wenn sie direkt aufgerufen wird.
Eine weitere verleiten der Problemumgehung (in Coffeescript, für Kürze: 3 Linien vs ~ 15)
class Configuration
constructor: (@value, @doc) ->
@::valueOf = -> @value
Dies zu new String()
ziemlich ähnlich ist. Es prototypiert nur die valueOf()
-Methode für das Objekt. Das Problem ist das gleiche wie oben. Sie können nicht direkt console.log(str)
den rohen String druckt und beide verwenden console.log(str.doc)
Die Frage:
Ist es in irgendeiner Weise möglich, dies zu erreichen, ohne meine ganze Code-Basis haben Refactoring?
Dies ist eine sehr interessante Frage. Was ist der Anwendungsfall? – woozyking
Für die Konfiguration meiner eckigen App. Ich speichere die öffentlichen Umgebungsvariablen (wie die Rest-Backend-URL) in einer env-spezifischen Datei und definiere sie in einem Singleton, die ich später überall verwenden kann. –
Kannst du ein Beispiel teilen, wie du diese Strings verwendest? Da für alle praktischen Zwecke 'new String()' Ihr Problem lösen sollte. – gurvinder372