Pair program with me! profile for carousel at Stack Overflow, Q&A for professional and enthusiast programmers

3/09/2013

mixins pattern


Javascript doesn't have support for muptiple inheritance.That means that objects by default can inherite only from one class (constructor). But because of expressive power of language, we can easily implement multiple inheritance with mixin pattern.

At the begining, let't quote Stoyan Stefanov from his book Javascript patterns:

Code reuse is the goal - inheritance is just one of options throughout we can achive code reuse

Lets see some code:

function mix() {// no parameters specified
    var arg, prop, child = {};
    for (arg = 0; arg < arguments.length; arg += 1) {// length
        for (prop in arguments[arg]) {// browse properties
            if (arguments[arg].hasOwnProperty(prop)) {// check if properties exists
                child[prop] = arguments[arg][prop]; //copy
            }
        }
    }
return child;
}

// call a function with mixed objects as arguments
var cake = mix(
    {eggs: 2, large: true},
    {butter: 1, salted: true},
    {flour: "3 cups"},
    {sugar: "sure!"}
);

As you can see, it is simple to copy properties with this  pattern, and emulate multiple inheritance.  One interesting thing in this pattern is that in function mix there are no paramaters, all the job is done with arguments.  First we detect arguments length, then check  if propeties exists and finally we copy them into new object. This example is also great because it uses nested loops and conditions.

Happy Coding.




No comments:

Post a Comment