一张图 非常清晰的说明了区别1、使用foo.hasOwnProperty('bar') ##会优先检测foo上挂载的bar属性 如果没有 再去原型链上找2、使用Object.prototype.hasOwnProperty.call(foo,'bar') ##直接去foo上bar属性 如果没有 直接返回false3、为了区分 这个属性是定义在对象上的 还是定义在原型上的