深入理解javascript原型和閉包(3)——prototype原型
阿新 • • 發佈:2018-03-12
scrip 理解 隱藏 函數 col java 再看 深入理解java blog
上文中提到對象是函數創建得,而函數也是一種對象。對象就是屬性的集合,沒有方法。
每個函數都有一個屬性——prototype。
這個prototype的屬性值是一個對象(屬性的集合),默認有一個constructor屬性,指向這個函數本身。
上圖中,superType是一個函數,這個函數有個prototype屬性,該屬性的屬性值又是一個對象,這個對象默認有個constructor屬性,這個屬性的屬性值指向函數本身。
如上圖,superType是一個函數,右側的方框就是它的原型。
原型作為對象,屬性的集合,默認有個constructor屬性,有的還有其他屬性。比如object的原型裏面就有好幾個其他屬性。
同時也可以在自己自定義的方法的prototype中新增自己的屬性
1 function Fn(){}; 2 Fn.prototype.name=‘張三‘; 3 Fn.prototype.getYear=function () { 4 return 1988; 5 };
從畫的結構圖就可以看出自己手動添加的name屬性和getYear方法被添加到了prototype原型中。再看下面的例子
1 function Fn(){}; 2 Fn.prototype.name=‘張三‘; 3 Fn.prototype.getYear=function () { 4 return 1988;5 }; 6 var fn=new Fn(); 7 console.log(fn.name); 8 console.log(fn.getYear());
Fn是一個函數,fn對象是從Fn函數new出來的,這樣fn對象就可以調用Fn.prototype中的屬性和方法。
每個對象都有一個隱藏的屬性——_proto_,這個屬性引用了創建這個函數的原型,即fn._proto_ === Fn.prototype
這裏的_proto_稱之為對象的隱式原型。
深入理解javascript原型和閉包(3)——prototype原型