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);
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
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");
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With