var obj = { a: 1, b: true, c: function () {}, d: null, e: 'e' }; var fn = function (src) { var o = {}; var keys = Object.keys(src); for (var i = 0; i < keys.length; ++i) { var key = keys[i]; o[key] = src[key]; } return o; }; var r = fn(obj); assertEqual(r.a, obj.a); assertEqual(r.b, obj.b); assertEqual(r.c, obj.c); assertEqual(r.d, obj.d); assertEqual(r.e, obj.e); test(function () { fn(obj); });