00001 var baseGetTag = require('./_baseGetTag'), 00002 getPrototype = require('./_getPrototype'), 00003 isObjectLike = require('./isObjectLike'); 00004 00006 var objectTag = '[object Object]'; 00007 00009 var funcProto = Function.prototype, 00010 objectProto = Object.prototype; 00011 00013 var funcToString = funcProto.toString; 00014 00016 var hasOwnProperty = objectProto.hasOwnProperty; 00017 00019 var objectCtorString = funcToString.call(Object); 00020 00049 function isPlainObject(value) { 00050 if (!isObjectLike(value) || baseGetTag(value) != objectTag) { 00051 return false; 00052 } 00053 var proto = getPrototype(value); 00054 if (proto === null) { 00055 return true; 00056 } 00057 var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor; 00058 return typeof Ctor == 'function' && Ctor instanceof Ctor && 00059 funcToString.call(Ctor) == objectCtorString; 00060 } 00061 00062 module.exports = isPlainObject;