Exercise - JS Objects - Mutability

by Galanda

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
//
// Hint: you'll use a for..in loop
var joe = {
    name: "Joe",
    age: 32,
    reducer: function(){
    	return (this.age-10); 
    }
}

function copy(obj) {
  var retObj={};  
  var val;
    /* Insert your functionality here */
  var keys [];
  var values []''
  keys = Object.keys(obj);
  values=   Object.getOwnPropertyNames(obj);
	for (var prop in obj){
  	if (obj.hasOwnProperty(prop)){
    	console.log("own prop "+ prop);
    
      val = obj[prop];
    	retObj[prop ]= val;
    }
    if (typeof(prop)=="function"){
    	console.log(" func "+ prop);
      retObj[prop ]= obj.copy(prop);
    }
    
  }
  return retObj;
}

// 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 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