Exercise - Objects

by Shane Porter

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 copy() {
            var objCopy={};
            var a = Object.getOwnPropertyNames(this);
            var l = a.length;
            for(i=0; i<l; i++) {
                Object.defineProperty(objCopy, a[i], 
                Object.getOwnPropertyDescriptor(this, 									  a[i]));
            }
        return objCopy;
        }
}

function copy(obj) {
    objCopy = {};
    array = Object.keys(obj);
    l = array.length;
    for(i=0; i<l; i++) {
        Object.defineProperty(objCopy, array[i], 
                              Object.getOwnPropertyDescriptor(obj, 									  array[i]));
    }
    return objCopy;
}


// 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();

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

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