JavaScript 原型總結三 函數和對象的關係

1.既typeof以後的另外一位老朋友!

在我們的上一節(JavaScript 原型總結二 一切皆對象之typeof)中說道,函數也是一種對象。他也是屬性的集合,你也能夠對函數進行自定義屬性。javascript

不用等我們去試驗,javascript本身就先作了表率,人家就默認的給函數一個屬性——prototype。對,每一個函數都有一個屬性叫作prototype。java

這個prototype的屬性值是一個對象(屬性的集合,再次強調!),默認的只有一個叫作constructor的屬性,指向這個函數自己。微信

如上圖,SuperType是是一個函數,右側的方框就是它的原型。函數

原型既然做爲對象,屬性的集合,不可能就只弄個constructor來玩玩,確定能夠自定義的增長許多屬性。例如這位Object大哥,人家的prototype裏面,就有好幾個其餘屬性。spa

function Fn() { }
        Fn.prototype.name = '張澤立';
        Fn.prototype.getYear = function () {
            return 0;
        };

        var fn = new Fn();
        console.log(fn.name);
        console.log(fn.getYear());
//即,Fn是一個函數,fn對象是從Fn函數new出來的,這樣fn對象就能夠調用Fn.prototype中的屬性。
//由於每一個對象都有一個隱藏的屬性——「__proto__」,這個屬性引用了建立這個對象的函數的prototype。
//即:fn.__proto__ === Fn.prototype

說到底:對象是由函數建立的.JavaScript的繼承離不開prototype.這也是問什麼函數的typeof爲何是Function類型了,原則上就是造成了一個原型環鏈,可能這裏講的不叫抽象,這是必要要注意對象的"_proto_".net

這裏的"__proto__"成爲「隱式原型」,下一節<JavaScript 原型總結四 隱式原型>。另外本人的訂閱號和微信prototype

相關文章
相關標籤/搜索