轉自:?詳談JavaScript原型鏈?

1. 可用于動態(tài)給構造函數(shù)添加屬性或方法
通過一個構造函數(shù)創(chuàng)建出來的多個實例,如果都要添加一個方法,給每個實例去添加并不是一個明智的選擇。這時就該用上原型了。
在實例的原型上添加一個方法,這個原型的所有實例便都有了這個方法。
按照JS引擎的分析方式,在訪問一個實例的屬性的時候,現(xiàn)在實例本身中找,如果沒找到就去它的原型中找,還沒找到就再往上找,直到找到。這就是原型鏈。
2.?只有函數(shù)有prototype,對象是沒有的。
但是函數(shù)也是有__proto__的,因為函數(shù)也是對象。函數(shù)的__proto__指向的是Function.prototype。
也就是說普通函數(shù)是Function這個構造函數(shù)的一個實例。
3. instance
instanceof是判斷實例對象的__proto__和生成該實例的構造函數(shù)的prototype是不是引用的同一個地址。
是返回true,否返回false。
那怎么判斷實例是由哪個構造函數(shù)生成的呢?這時候就要用到constructor了。
實例的原型的構造函數(shù), obj.__proto__.constructor