js> Object.getPrototypeOf; function getPrototypeOf() { [native code for Object.getPrototypeOf, arity=1] } js> // FIXME: not sure if this is correct behaviour, should we be expecting a TypeError here instead? js> Object.getPrototypeOf() === undefined; true js> var nonObjects = [undefined, null, true, 1, 'hello']; js> nonObjects.every(function(value) { > try { > Object.getPrototypeOf(value); > return false; > } catch (e if e instanceof TypeError) { > return true; > } catch (e) { > return false; > } > }); true js> [(function(){}), [], {}].every(function(obj) { > return Object.getPrototypeOf(obj) === obj.__proto__; > }); true js> function UserDefined() {} js> [Date, UserDefined].every(function(type) { > var instance; > eval('instance = new '+type.name); > return Object.getPrototypeOf(instance) === type.prototype; > }); true