Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Converting C# class to JavaScript

Take a look at this basic class:

namespace AcmeWeb
{
    public string FirstName { get; set; }

    public class Person 
    {
        public Person(string firstName, string lastName) 
        {
            if (String.IsNullOrEmpty(firstName))
            {
                throw new ArgumentNullException(firstName);
            }

            this.FirstName = firstName;
        }
    }
}

What's the best translation of this into JavaScript?

This is what I'm thinking:

(function(namespace) {

    namespace.Person = function(firstName, lastName) {

        // Constructor

        (function() {
            if (!firstName) {
                throw "'firstName' argument cannot be null or empty";
            }
        })();

        // Private memberts

        var _ = {
            firstName: firstName
        };

        // Public members

        this.firstName = function(value) {
            if (typeof(value) === "undefined") {
                return _.firstName;
            }
            else {
                _.firstName = value;
                return this;
            }
        };

    };

})(AcmeWeb);
like image 714
AgileMeansDoAsLittleAsPossible Avatar asked Dec 22 '10 16:12

AgileMeansDoAsLittleAsPossible


2 Answers

You could use real getters/setters in javascript. See John Resig's post for more information. See the fiddle.

(function(NS) {
    NS.Person = function(firstName, lastName) {
        if (!firstName) {
            throw "'firstName' argument cannot be null or empty";
        }

        var FirstName = firstName;
        this.__defineGetter__("FirstName", function(){
            console.log('FirstName getter says ' + FirstName);
            return FirstName;
        });

        this.__defineSetter__("FirstName", function(val){
            console.log('FirstName setter says ' + val);
            FirstName = val;
        });
    }
})(AcmeWeb);

var p = new AcmeWeb.Person('John', 'Smith');
p.FirstName;          // => FirstName getter says John
p.FirstName = 'Joe';  // => FirstName setter says Joe
like image 157
Josiah Ruddell Avatar answered Oct 15 '22 21:10

Josiah Ruddell


var AcmeWeb = {
    Person: function(firstName, lastName) {
        if (!firstName) {
            throw "'firstName' argument cannot be null or empty";
        }
        this.FirstName = firstName;
    }
};

Then you can new up a Person:

var person = new AcmeWeb.Person("john", "smith");
like image 33
Emmett Avatar answered Oct 15 '22 21:10

Emmett