hasOwnProperty自我理解

暂时不考虑ES6中symbol,hasOwnProperty()方法返回的是一个对象上是否包含一个指定属性,如果含有则返回true,如果没有则返回false。

  in  运算符不同,该方法会忽略掉那些从原型链上继承到的属性。 这一特性尝尝用来检测一个对象上是否包含自身拥有的属性,并且不是从原型链上继承而来的。
如:
o = new Object();
o.prop = 'exists';

function changeO() {
  o.newprop = o.prop;
  delete o.prop;
}

o.hasOwnProperty('prop');   // 返回 true
changeO();
o.hasOwnProperty('prop');   // 返回 false
但有时候会出现这样的情况,自己封装的对象中包含同名的hasOwnProperty方法,这时候如果调用的话会直接使用自己封装的方法,为了避免这样的情况发生,使用下列的方式来避免这种情况:

var foo = {
    hasOwnProperty: function() {
        return false;
    },
    bar: 'Here be dragons'
};

foo.hasOwnProperty('bar'); // 始终返回 false

// 如果担心这种情况,可以直接使用原型链上真正的 hasOwnProperty 方法
({}).hasOwnProperty.call(foo, 'bar'); // true

// 也可以使用 Object 原型上的 hasOwnProperty 属性
Object.prototype.hasOwnProperty.call(foo, 'bar'); // true





猜你喜欢

转载自www.cnblogs.com/DreamSeeker/p/4c2e17b903d94309e65f3109dc5b04d0.html