Javascript 追本溯源

       一直以來對Javascript的繼承關係都是經過死記硬背下來的,對於一個理科生,喜歡邏輯思惟的人來說,死記硬背特別頭痛,且理科生對於可以死記硬背下來的東西也很容易忘記,不知道其餘理科生童鞋們是否如此,長時間發現,我是這樣的,喜歡邏輯性的東西, 不太喜歡死記硬背。最近看過篇文章《Javascript繼承機制的設計思想》(原文地址),javascript

  原文寫的很好,當中講了Javascript的繼承產生思路。html

       以下列舉一下表過程:java

1.1994年,網景公司(Netscape)發佈了Navigator瀏覽器0.9版,能夠瀏覽網頁了(無前段交互,無網頁互動)。編程

2.工程師Brendan Eich負責開發這種新語言(使得瀏覽器能夠與網頁互動的網頁頁腳本語言)瀏覽器

3.在其餘面向對象的語言的影響下,設計了繼承機制(爲了下降難度,沒有引入「類」的概念,使用了概念有:構造器constructor,new)編程語言

4.爲作好數據共享,增長了prototype。ide

 

說說繼承,爲了學習繼承,編寫了以下腳本函數

 

javascript中的數據繼承是經過_proto_ chain來實現的學習

javascript中繼承機制的實現:this

JavaScript中的原型(prototype)是和函數(function)緊密相連的,由於每一個函數默認都會有一個屬性叫prototype, 每個經過函數和new操做符生成的對象都具備一個屬性__proto__, 這個屬性保存了建立它的構造函數的prototype屬性的引用。這個__proto__對象就是實現原型鏈的核心對象。JavaScript是一門面向對象的編程語言,它的繼承特性其實就是經過原型鏈機制來實現的。同時,instanceof運算符也須要在原型鏈的支持。」

寫了一段代碼以下:

<script>
        function Person(name){
            this.name = namel;
        }

        alert(Person instanceof Object);//true  

        //方式一
        Person.prototype.species = "ABC";
        Person.prototype.DoHardWork = function () {
            alert(this.species);
        }
        //方式二:兩種方式等價,但有區別
        Person.prototype = {
            species: "ABC",
            DoHardWork: function () { alert(this.species) }
        };//至關於 Person.prototype  = new Object({……});因此,Person.prototype.constructor === Object;
        Person.prototype.constructor = Person;//有利溯源查看Person這個原型,

        var father = new Person("張三");//father 中有 __propotype__屬性,指向了Person.prototype;
        var uncle = new person("張四");

        var Son = function (name) { this.name = name; };

        Son.prototype = father;
        son.prototype.constructor = Son;

        var son1 = new Son("張小三");//son1中__propotype__指向了father,father 中有 __propotype__屬性,指向了Person.prototype;
        /*
        查看Son: son1.constructor;
        查看Person:son1.constructor.prototype.constructor,//若是沒有 Person.prototype.constructor = Person;這句話,就不能獲取到Person


        經過new生成的對象的Constructor找構造對象,經過構造對象(也是函數)獲取繼承的Prototype對象,經過Prototype對象的Constructor獲取原函數。
        */
    </script>
相關文章
相關標籤/搜索