hasOwnProperty 說明

function f() {
   this.name = 'superman';
}
f.prototype.name = 'man';
alert(f.hasOwnProperty("name"));
var o = new f();
alert(o.hasOwnProperty('name'));
alert(o.constructor.prototype.hasOwnProperty('name'));

 

返回結果

false

true

true

 

第一個 alert

如果f  函數是以函數式調用 則 name 會定義到全局,f 不存在 name屬性 因爲 會返回false

 

第二個 alert

創建 o 對象時 name 的所有者是 o 對象,檢查 o 對象是否存在 name 屬性 肯定返回 true

 

第三個 alert

構造器的原型也有 name 屬性 自然也會返回 true 

 

代碼稍微變更

function f() {
   
}
f.prototype.name = 'man';
var o = new f();
alert(o.hasOwnProperty('name'));


返回 false ,簡單點說 hasOwnProperty() 他的調用者是誰它就在那個作用域中去尋找屬性。

當前 name屬性的所有者是 原型,調用者是 o 對象,所以他不會到原型中去找

 

這跟 直接彈出 alert(o.name) 不一樣,如果是訪問(讀取)某一個屬性 則首先會在構造器中找所接近的屬性 如果沒有 則會到原型中去找

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章