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);
}原型链