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的自身属性