從一個例子理清JS中的prototype、__proto__榄审、constructor及Object砌们、Function的關(guān)系:
function Animal(){}
var anim = new Animal()
1. new出來的對象是普通對象,有__proto__屬性,但沒有prototype屬性
2. anim的__proto__屬性浪感,指向它的類型Animal的prototype對象
3. Animal是函數(shù)對象(function Animal(){}相當(dāng)于var Animal = new Function())昔头,它有prototype、__proto__屬性
4. Animal的__proto__屬性指向它的類型Function的prototype對象
5. Animal的prototype(屬性指向的)對象(普通對象)影兽,包含__proto__揭斧、constructor屬性,其中constructor即其本身Animal赢笨,__proto__指向Object.prototype
6. Function自身是一個函數(shù)對象未蝌,其prototype和__proto__屬性相等,都指向一個函數(shù)對象茧妒;但這個函數(shù)對象比較特殊萧吠,它沒有prototype屬性,其同樣包含__proto__桐筏、constructor屬性纸型。其中constructor即其本身Function,__proto__指向Object.prototype
7. Object自身也是一個函數(shù)對象梅忌,其__proto__屬性指向它的類型Function的prototype屬性狰腌;它的prototype對象是一個普通對象,其中constructor即其本身Object牧氮,__proto__比較特殊是null