JavaScript Objects With Value - valueOf and toString
Written by Mike James   
Friday, 08 March 2013
Article Index
JavaScript Objects With Value - valueOf and toString
Functions v Objects

Functions

Now we come to a tricky area. In JavaScript functions are objects - yes they can have properties and methods. They can therefore have toString and valueOf methods. What this means is that a function can return three different values depending on how it is used.

Consider:

function myFunction() {
 return 1;
};
myFunction.valueOf = function() { return 2; }; myFunction.toString = function() { return "A"; };

After this what does:

alert(myFunction);

display? Answer: "A".

What does

alert(myFunction+0);

display?  Answer: 2.

Finally, what does:

alert(myFunction());

display? Answer: 1.

This also raises the issue of why bother using a function if general objects can return a value?

The reason is fairly obvious but deserves some thought.

Functions Versus Objects

You do have a choice of associating a value with an object as in:

myObject+1;

You also can define a function that does the same thing:

myFunction()+1;

The difference is that the function has a natural way to accept arguments. For example, you can write:

myFunction(10)+1;

but without defining it to be a function you can't write:

myObject(10)+1;

In other words, objects can simply represent a value or a state. That value or state can be manipulated by the methods that the object provides but it cannot be modified while it is being used in an expression.

A function, on the other hand, represents a relationship between input data and the result.

Notice also that, while a function is an object, not all objects are functions and in this sense a function is a "bigger" object.

When should you consider using a value associated with an object?

Some might reply "never" as it isn't a common pattern and could be confusing.

However, if an object represents data or something with state then it is a good approach.

Consider the JavaScript date object:

var d=Date.now();
alert(d);

The toString function returns the number of milliseconds since the date epoch. A Date object is an ideal example of when to use an object as a value.

 

Related Articles

A JavaScript TimeInterval object

Javascript Jems - First class functions

Overriding a JavaScript global function - parseInt

 

To be informed about new articles on I Programmer, subscribe to the RSS feed, follow us on Google+, Twitter, Linkedin or Facebook, install the I Programmer Toolbar or sign up for our weekly newsletter.

 

blog comments powered by Disqus

 

Banner


Just JavaScript - The Prototype Mechanism

The prototype is about the most mysterious part of JavaScript. Once you have mastered the call context and the constructor, it is the prototype that you have to turn to. How does it work? How do you u [ ... ]



Getting Started With jQuery - Advanced Filters

When you first encounter filters they seem easy enough - just extract the results you want from the results you have. The trouble is that filters are fun and jQuery pushes the idea beyond the obvious. [ ... ]


Other Articles

 

 

 

 

 

 



Last Updated ( Friday, 08 March 2013 )
 
 

   
RSS feed of all content
I Programmer - full contents
Copyright © 2014 i-programmer.info. All Rights Reserved.
Joomla! is Free Software released under the GNU/GPL License.