I would like to know if there is a way to return a JS class’s value by default instead of of reference to the class object itself. Let’s say, for example, I want to wrap a string..
var StringWrapper = function(string) { this.string = string; }; StringWrapper.prototype.contains = function (string) { if (this.string.indexOf(string) >= 0) return true; return false; }; var myString = new StringWrapper("hey there"); if(myString.contains("hey")) alert(myString); // should alert "hey there" if(myString == "hey there") // should be true doSomething();
and now I want to get string
just by using myString
rather than myString.string
. Is this doable somehow?
Edit
I took the console.log(myString)
out of the question, because console.log
has behavior that I didn’t originally take into account. This question isn’t about log
.
Advertisement
Answer
Your question doesn’t entirely make sense, but it kind of sounds like you want to implement the .toString
interface:
var MyClass = function(value) { this.value = value; }; MyClass.prototype.toString = function() { return this.value; }; var classObj = new MyClass("hey there"); snippet.log(classObj); snippet.log(classObj + "!");
<!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 --> <script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
With ES6 class syntax:
class MyClass { constructor(value) { this.value = value; } toString() { return this.value; } } var classObj = new MyClass("hey there"); console.log(classObj); console.log(classObj + "!");