关于原型的一些基本知识

目录

1. prototype 原型对象

    1.1介绍

    1.2 语法

    1.3 作用

    1.4 实例

    1.5 总结

2.constructor   构造函数

    2.1 介绍

    2.2 语法

    2.3 作用

    2.4 实例

3. __proto__

    3.1介绍

    3.2 语法

   3.4实例

    3.3 原型链

4.总结


1. prototype 原型对象

    1.1介绍

        每一个【函数】都有偶一个propotype属性,指向原型对象

        普通函数也有propotype属性,没有用。

        只需要关注构造函数的prototype属性

    1.2 语法

        函数名.prototype

    1.3 作用

        原型对象上的属性和方法可以被实例对象共享

    1.4 实例

 <script>

            //创建学生的构造函数
            function Student(name,age,sex){
                this.name=name;
                this.age = age;
                this.sex = sex;
            }

            //在原型对象上定义属性和方法,原型对象上的属性和方法可以被实例对象共享
            Student.prototype.court='web课程';
            Student.prototype.summer='夏天'
            Student.prototype.hobby=function(){
                return  this.age+"的"+ this.name + "爱上" +this.court +'喜欢在'+this.summer+'穿秋裤略略略'
            }

            //创建构造函数的实例对象
            let s1=new Student('小爽',19,'女')
            console.log(s1);
            console.log(s1.court);
            console.log(s1.hobby());
         
        </script>

   效果:

    1.5 总结

        1)原型对象上的属性和方法可以被实例对象共享

        2)只要修改原型对象,变动就立刻会体现在所有实例对象上

        3)如果实例对象自身就有某个属性或方法,他就不会再去原型对象寻找这个属性或方法

2.constructor   构造函数

    2.1 介绍

        每一个【原型对象】都有constructor属性,指向构造函数

        原型对象上的属性和方法可以被实例对象共享,所以实例对象也有constructor属性,指向创建实例的构造函数

    2.2 语法

        对象.constructor

    2.3 作用

        constructor属性的作用是,可以得知某个实例对象,到底是哪一个构造函数产生的。

    2.4 实例

 <script>
    function F() {};
    var f = new F();
    console.log(f.constructor === F); // true
    console.log(f.constructor === Function); // false
 </script>

 

3. __proto__

    3.1介绍

        __proto__属性是每一个对象以及函数都隐含的一个属性。

        __proto__属性指向的是创建他的构造函数的prototype。原型链就是通过这个属性构件的。

        即每一个【对象】和【函数】都有 __proto__属性,指向它的原型对象

    3.2 语法

        对象.__proto__

        最大的原型对象是 Object.prototype

        Object.prototype 的原型呢?

        Object.prototype.__proto__ 的值为 null,也就是说 Object.prototype 没有原型。所以查找属性的时候查到 Object.prototype 就可以停止查找了。

        Object.prototype.__proto__  //null

   3.4实例

function Person() {}
var p1 = new Person();
console.log(p1.__proto__); //指向Person的原型
console.log(p1.__proto__.__proto__); //指向Person的原型的原型--Object.prototype
console.log(p1.__proto__.__proto__.__proto__); //null
console.log(Object.prototype.__proto__); //null

 

    3.3 原型链

        读取对象的属性,先读取对象本身的属性,如果没有,去原型对象上查找。若还没有,继续去原型对象的原型对象上查找,

        最终到Object.prototype上查找,如果没有 就返回undefined

        通过__proto__查找属性的过程 形成一条链状结构,称为原型链

       

4.总结

    4.1 每一个【函数】都有prototype属性,指向他的【原型对象】

    4.2 每一个【对象】都有constructor属性,指向他的【构造函数】

    4.3 每一个【对象】和【函数】都有__proto__属性,指向他的【原型对象】

原型链:关系图如图:

图中由相互关联的原型组成的链状结构就是原型链,也就是蓝色的这条线

关系图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值