1. 程式人生 > >深入理解javascript原型和閉包(3)——prototype原型

深入理解javascript原型和閉包(3)——prototype原型

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原型