原型prototype

prototype:
每一個函數都有一個prototype屬性,全部經過相同函數建立的對象都指向同一個prototype對象。
當使用對象的屬性和方法時,首先在對象內部查找,若是沒有就去原型中查找
若是構造函數建立一個對象後修改構造函數的原型,以前建立的對象原型不變
若是將prototype直接替換爲一個新對象,原型對象中的constructor指向會有問題,應該手動修改html


constructor:
每一個原型對象都有一個constructor(構造函數)屬性,constructor屬性指向prototype所在函數的指針瀏覽器


__proto__:
每一個對象都有一個__proto__屬性,對象經過__proto__屬性能夠訪問原型。__proto__是一個非標準屬性,低版本瀏覽器不支持該屬性。
函數也是對象,也擁有本身的__proto__, 也就是Function.prototype, 而Function.prototype的__proto__指向了Object.prototype.
對象的__proto__屬性與構造函數的prototype屬性指向同一個對象函數

環形結構:http://www.cnblogs.com/wangfupeng1988/p/3979290.htmlprototype

 

原型鏈:指針

 

 

對象實例能夠訪問原型中的值,可是不能修改原型中的值,若是在實例中添加一個屬性。而這個屬性已經包含在原型中,那咱們就在實例中建立屬性。
使用hasOwnProperty()函數能夠查看屬性是在對象中仍是原型中,只有屬性在對象中時纔會返回true
當爲對象添加一個屬性時,這個屬性就會屏蔽原型對象中同名的那個屬性htm

Object.prototype成員
hasOwnProperty("propertyName"):是檢測對象在排除原型鏈的狀況下是否具備某個屬性。
propertyIsEnumrable("propertyName"):檢測屬性是否可用for..in..枚舉,有些屬性是不能被枚舉的,好比:toString
toString、toLocalString:轉換爲字符串
isPrototypeOf(obj):查看對象與原型是否有關聯關係對象

不管屬性在對象或原型中都返回true:
alert("name" in person1)blog

經過這個函數能夠查看屬性只否包含在原型中:
function hasPrototypeProperty(obj,propertyName)
{
return !obj.hasOwnProperty(propertyName) && (propertyName in obj);
}原型鏈

相關文章
相關標籤/搜索