private attributes and inheritance in javascript

by odiseo

JavaScript

var CreditCard = function(ccNumber,expirationDate) {
    var _creditCardNumber = ccNumber;
    var _expirationDate = expirationDate;

    function getCreditCardNumber() {
        var chunks = _creditCardNumber.split('-');
        return chunks[chunks.length - 1];
    }

    function isExpired() {
        var chunks = _expirationDate.split('/');
        var year = chunks[chunks.length - 1];
        return (year < '13'); //ok, a sloppy validation        
    }

    return {
        isExpired: isExpired,
        getCreditCardNumber: getCreditCardNumber,

    };

};

var myCard = CreditCard('1213-6666-4232-2323', '02/14');
console.log(myCard);
console.log(myCard.getCreditCardNumber());

function object(obj){
    function F(){};
    F.prototype = obj;
    return new F();
}

var sorianaCard = object(CreditCard('5555-5555-6666-6666', '02/12'));
//We futher extend an object functionality
sorianaCard.getTienda = function(){return "Guadalajara";};
console.log(sorianaCard.getCreditCardNumber());
console.log(sorianaCard.getTienda());