对象属性的查找顺序
Therefore, property inheritance occurs only when you read property values, not when you write them. If you set the property p in an object o that inherits that property from its prototype, what happens is that you create a new property p directly in o. Now that o has its own property named p, it no longer inherits the value of p from its prototype. When you read the value of p, JavaScript first looks at the properties of o. Since it finds p defined in o, it doesn't need to search the prototype object and never finds the value of p defined there. We sometimes say that the property p in o "shadows" or "hides" the property p in the prototype object. Prototype inheritance can be a confusing topic.
“读”属性的时候存在原型继承,而“写”属性的时候没有原型继承。自身的属性会覆盖从prototype继承得到的属性。
-----------------------------分隔线---------------------------
利用原型继承,可以扩展javascript中的原始类型。
function Animal(nAge){ this.age = nAge;}Animal.prototype.eat = function(){ // eat something};function Cat(sName){ this.name = sName;}Cat.prototype = new Animal();Cat.prototype.constructor = Cat;var cat = new Cat("kitty");cat.eat();