最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Javascript學(xué)習(xí)筆記之 對象篇(三) : hasOwnProperty

 更新時間:2014年06月24日 09:02:41   投稿:hebedich  
判斷一個屬性是定義在對象本身而不是繼承自原型鏈,我們需要使用從 Object.prototype 繼承而來的 hasOwnProperty 方法。 hasOwnProperty 方法是 Javascript 中唯一一個處理對象屬性而不會往上遍歷原型鏈的。
// Poisoning Object.prototype
Object.prototype.bar = 1;
var foo = {goo: undefined};

foo.bar; // 1
'bar' in foo; // true

foo.hasOwnProperty('bar'); // false
foo.hasOwnProperty('goo'); // true

在這里,只有 hasOwnProperty 能給出正確答案,這在遍歷一個對象的屬性時是非常必要的。Javascript 中沒有其他方法能判斷一個屬性是定義在對象本身還是繼承自原型鏈。

hasOwnProperty 作為屬性

Javascript 并未將 hasOwnProperty 設(shè)為敏感詞,這意味著你可以擁有一個命名為 hasOwnProperty 的屬性。這個時候你無法再使用本身的 hasOwnProperty 方法來判斷屬性,所以你需要使用外部的 hasOwnProperty 方法來進(jìn)行判斷。

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

foo.hasOwnProperty('bar'); // always returns false

// Use another Object's hasOwnProperty and call it with 'this' set to foo
({}).hasOwnProperty.call(foo, 'bar'); // true

// It's also possible to use hasOwnProperty from the Object
// prototype for this purpose
Object.prototype.hasOwnProperty.call(foo, 'bar'); // true

總結(jié)

當(dāng)判斷對象屬性存在時,hasOwnProperty 是唯一可以依賴的方法。這里還要提醒下,當(dāng)我們使用 for in loop 來遍歷對象時,使用 hasOwnProperty 將會很好地避免來自原型對象擴展所帶來的困擾。

下面是其他網(wǎng)友的補充:

Javascript中Object對象原型上的hasOwnProperty()用來判斷一個屬性是定義在對象本身而不是繼承自原型鏈。

obj.hasOwnProperty(prop)

參數(shù) prop

要檢測的屬性 字符串 名稱或者 Symbol(ES6)

o = new Object();
o.prop = 'exists';
o.hasOwnProperty('prop');       // 返回 true
o.hasOwnProperty('toString');     // 返回 false
o.hasOwnProperty('hasOwnProperty');  // 返回 false

使用hasOwnProperty作為某個對象的屬性名

因為javascript沒有將hasOwnProperty作為一個敏感詞,所以我們很有可能將對象的一個屬性命名為hasOwnProperty,這樣一來就無法再使用對象原型的 hasOwnProperty 方法來判斷屬性是否是來自原型鏈。

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

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

不能使用 該對象.hasOwnProperty 這種方法,怎么來解決這個問題呢?我們需要使用原型鏈上真正的 hasOwnProperty 方法:

({}).hasOwnProperty.call(foo, 'bar'); // true
// 或者:
Object.prototype.hasOwnProperty.call(foo, 'bar'); // true

參考:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty

相關(guān)文章

最新評論

梅河口市| 尉犁县| 双柏县| 和硕县| 正蓝旗| 上高县| 吉安市| 岳阳县| 庆云县| 定安县| 吴川市| 江永县| 泰宁县| 深州市| 朝阳县| 岑巩县| 庄河市| 鹰潭市| 河北省| 察雅县| 化德县| 财经| 八宿县| 永福县| 九江市| 前郭尔| 离岛区| 南雄市| 南安市| 会东县| 辽中县| 南丹县| 屏边| 新密市| 清流县| 那曲县| 德昌县| 车险| 德保县| 泸定县| 英超|