JavaScript中的構造函數和原型!

JavaScript中的原型!

原型的內容是涉及到JavaScript中的構造函數的

每個構造函數都有一個原型對象!prototype

他的做用是 共享方法

每個實例化的對象都有一個對象原型__proto__

他指向的是構造函數的原型對象

因此咱們建立的實例對象可使用對象原型中的方法!

__proto__對象原型和原型對象prototype是等價的

__proto__對象原型的意義就在於爲對象的查找機制提供一個方向,或者說一條路線,可是它是一個非標準屬性,所以實際開發中,不可使用這個屬性,它只是內部指向原型對象prototype

看不見我, 看不見我,看不見我!

構造函數!

對象原型(proto)和原型對象(prototype)裏面都有一個constructor屬性!, constructor咱們稱之爲構造函數, 由於它指回構造函數自己!

constructor主要用於記錄該對象引用於哪一個構造函數,它可讓原型對象從新指向原來的構造函數

<script>
        //    構造函數的問題!
        function Gouzaohanshu(name, age, gender) {
            this.name = name;
            this.age = age;
            this.gender = gender;
            // this.hanshu = function() {
            //     console.log(123)
            // }
        }
        
        // 把構造函數放到咱們的原型對象身上!
        // Gouzaohanshu.prototype.hanshu = function () {
        //     console.log(123)
        // }
         //不少狀況下,咱們須要手動的利用 constructor這個屬性指固原來的構造函數
        // Gouzaohanshu.prototype.sleep = function() {
        //     console.log("我想睡覺!")
        // }

        // 若是對象比較多, 那麼咱們就能夠採起對象的形式存儲!
        // 可是若是你這樣作的話會把原先的原型對象給覆蓋了!
        // 原先的原型對象就不會指向上面的構造函數了!

        // 解決方法
        // 在下面的對象中添加這樣一句代碼!
        // construtor: Gouzaohanshu,
        // 就可讓構造函數指回他的自己了!
        // 一句話, 若是咱們修改了原來的原型對象, 給原型對象賦值是一個對象, 則必須手動的利用constructor 指回原來的構造函數!
        Gouzaohanshu.prototype = {
            construtor: Gouzaohanshu,
            hanshu() {
                console.log(123)
            },
            sleep: function() {
                console.log("我想睡覺!")
            }
        }

        var gz = new Gouzaohanshu('lvhang', 23, 'nan');
        // 在咱們建立的對象身上也有一個對象叫作!
        // __prototype__ 叫作對象的原型!
        // 它指向咱們構造函數的原型對象!
        var gz2 = new Gouzaohanshu('lvhang', 23, 'nan');
        gz.hanshu()
        //    __proto__對象的原型和原型對象prototype是等價的
        console.log(gz.__proto__ === Gouzaohanshu.prototype); // true 
        // 方法的查找規則:首先先看gz對象身上是否有hanshu方法,若是有就執行這個對象上的hanhsu方法
        // 若是沒有這個方法,由於有__proto__,就去構造函數原型對 Prototype身上去查找

        // constructor主要用於記錄該對象引用於哪一個構造函數,它可讓原型對象從新指向原來的構造函數
        console.log(gz.__proto__);
        console.log(Gouzaohanshu.prototype);

       

    </script>

相關文章
相關標籤/搜索