Question

This is such a fundamental question, that I'm sure it's a duplicate, so I apologize in advance, but is this how I write an object such that I use by saying:

myApplication.myFirstMethod(x);
x = myApplication.myFirstMethod();

Here's the code:

myApplication = {};
(function() {
    myApplication.myFirstMethod = function() {
        var local = {};
        if (arguments.length) {
            local.result = arguments[0];
        }
        return local.result;
    }
    myApplication.mySecondMethod = function() {
        var local = {};
        if (arguments.length) {
            local.result = arguments[0];
        }
        return local.result;
    }
})();
Was it helpful?

Solution

jsFiddle Demo

A more object oriented approach would be to use instantiation and prototype.

Setup

var Application = function(){
 this.local = {};  
};
Application.prototype.Value = function(){
 if (arguments.length) {
    this.local.result = arguments[0];
 }else{
    return this.local.result;
 } 
};

Used

var app = new Application();
app.Value(6);
alert(app.Value());//6

From a jQuery point of view, they will first screen to see if there are arguments, this code is direct from their source for the val function:

val: function( value ) {
    if ( !arguments.length ) {
        var elem = this[0];
...

It then goes on to use the element's native API and some other metrics to get the value for the element (In general, the only type of elements which will return a value from val are going to be elements such as input, select, etc. - form elements basically).

At the end of the if block it attempts to return various results based on if it found a value attached to the element (or set of elements). This guarantees that the clause of "setting" never executes when a "get" is encountered. If the case is that "set" is being used it goes through a slightly complex set of code to properly set a value to the element.

The reason that the code shows val: function() is because it is part of an object which is being used to "extend" the jQuery prototype using jQuery's extend functionality.

This is the exact code in a jsfiddle of jQuery's val function

OTHER TIPS

There are many patterns for creating objects like this and everyone has their favorites. Addy Osmani does an excellent job of summarizing the most popular patterns in his Javascript Design Patterns "book". Specifically, this section:

http://addyosmani.com/resources/essentialjsdesignpatterns/book/#designpatternsjavascript

I reread this semi-annualy just to make sure I'm keeping all the patterns in my quiver.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top