hasOwnProperty被遮蔽的问题

如果一个对象拥有自己的 hasOwnProperty 方法, 则原型链上的同名方法会被遮蔽(shadowed):

var foo = {
    hasOwnProperty: function() {
        return false;
},
bar: 'Here be dragons'};
foo.hasOwnProperty('bar'); 
// 始终返回 false
// 如果担心这种情况,可以直接使用原型链上真正的 hasOwnProperty 方法
({}).hasOwnProperty.call(foo, 'bar'); 
// true
Object.prototype.hasOwnProperty.call(foo, 'bar'); 
// true

最近遇到的问题,在写Object.create兼容写法时有如下代码

P = Object(arguments[1]);
for (var i in P) {
   if (Object.prototype.hasOwnProperty.call(P, i)) {
      obj[i] = P[i];
  }   //判断i是否为P的自身属性