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>

相关文章
相关标签/搜索