代碼示例
1 var CustomClass = function() { }; 2 var CustomObject = new CustomClass();
發生了什么事情
原型鏈規則
規則1
每個對象都有一個“__proto__”屬性,這個屬性對外不可見,只有javascript解釋器知道,在google瀏覽器中可以看到這個屬性。
規則2
“取值操作”CustomObject.XXXProperty的規則是,先查找CustomObject對象本身有沒有XXXProperty,沒有的話就去CustomObject.__proto__中找,還沒找到就去CustomObject.__proto__.__proto__中去找,以此類推直到找到Object.__proto__。
規則3
“賦值操作”CustomObject.XXXProperty= xxxValue的規則是,直接將值xxxValue賦給CustomObject.XXXProperty。也就是說,“賦值操作”和原型鏈沒有任何關系。
規則4
CustomObject.__proto__指向的對象和其實例化時CustomClass.prototype指向的對象是一個對象,但是CustomClass.prototype可以隨時修改其指向的對象。
備注
只要精通“原型鏈”和“一切結皆是對象",理解“繼承”和“摻入”就不是問題了,自己實現這些特性應該也不難。我用了四年才明白上邊這些規則。