UNPKG

sugar

Version:

A Javascript utility library for working with native objects.

23 lines (19 loc) 1.07 kB
'use strict'; var coreUtilityAliases = require('../var/coreUtilityAliases'); var hasOwn = coreUtilityAliases.hasOwn; function hasValidPlainObjectPrototype(obj) { var hasToString = 'toString' in obj; var hasConstructor = 'constructor' in obj; // An object created with Object.create(null) has no methods in the // prototype chain, so check if any are missing. The additional hasToString // check is for false positives on some host objects in old IE which have // toString but no constructor. If the object has an inherited constructor, // then check if it is Object (the "isPrototypeOf" tapdance here is a more // robust way of ensuring this if the global has been hijacked). Note that // accessing the constructor directly (without "in" or "hasOwnProperty") // will throw a permissions error in IE8 on cross-domain windows. return (!hasConstructor && !hasToString) || (hasConstructor && !hasOwn(obj, 'constructor') && hasOwn(obj.constructor.prototype, 'isPrototypeOf')); } module.exports = hasValidPlainObjectPrototype;