Exercise - JS Objects - Mutability

by Kaushik Ruparel

JavaScript

// 1)
// Create a function that accepts an object as an argument
// and returns a copy of that object
// So that the following example will run correctly
var joe = {
    name: "Joe",
    age: 32,
    copy: function () {
        var dest = {};
        /* Insert your functionality here */
        for (var p in this) {
            if (this.hasOwnProperty(p)) {
                dest[p] = this[p];
            }
        }
        return dest;
    }
};

function copy(source) {
    var dest = {};
    /* Insert your functionality here */
    for (var p in source) {
        if (source.hasOwnProperty(p)) {
            dest[p] = source[p];
        }
    }
    return dest;

}

// Testing your copy function...
var jim = copy(joe);

console.group("Test");
if (jim === joe) {
    console.log("Nope! They are the same object");
} else {
    console.log("Great job! You made a copy.");
}
console.log("The two objects are:", jim, ",", joe);
console.groupEnd();

var barney = joe.copy();
console.group("Test 2");
if (barney === joe) {
    console.log("Nope! They are the same object");
} else {
    console.log("Great job! You made a copy.");
}
console.log("The two objects are:", barney, ",", joe);

console.groupEnd();

// 2)
//
// Make sure the function ONLY copies "own" properties
// hint: use hasOwnProperty()

// 3) Bonus
//
// Add the function as a method on an object, 
// then invoke the method of that object to copy it
// hint: you will use "this" keyword in your method
//
// ex: myObject.copy(); // outputs a copy

// 4) Ultra bonus
//
// Make it so that ALL objects inherit this "copy" method
// hint: you will extend Object.prototype