JS高级之原型对象、三角关系、面向对象的三大特征

目录

开辟空间的细节

构造函数里内存浪费的问题

原型对象

__proto__

对象成员访问规则

面向对象的三大特征

 继承

原型链


开辟空间的细节

什么时候会开辟堆空间的总结

                有 new 就会开新的堆空间

                遇到 function 声明函数也会开辟一个新空间

                遇到 {} 或者 [] 也会开辟一个新的堆空间

                        {} 相当于 new Object

                        [] 相当于是 new Array

目的:复杂数据类型之间比较,比较的是地址

构造函数里内存浪费的问题

构造函数里如果写了方法,那意味着每次调用构造函数,都会一个新的空间放这个方法

那意味着如果创建10个对象,就浪费了10个空间,例如下方代码

            function Person (name, age) {
    
                this.name = name 
                this.age = age
                this.sayHi = function () {
    
                    console.log('大家好')
                }
            }

这时候要解决构造函数里的方法内存浪费的问题

解决办法:使用原型对象,把方法放在原型对象上即可!

        function Person(name, age) {

            this.name = name
            this.age = age
        }

        // 写在原型对象上
        Person.prototype.sayHi = function () {

            console.log('大家好')
        }

原型对象

每当使用 function 声明一个函数,就有一个与之对应的 原型对象

原型对象也是对象,所以里面也可以动态的加属性和方法

        给原型对象加的方法,那么所有通过这个构造函数实例化出来的对象都可以访问到

 

每个 原型对象 默认都有一个属性叫 constructor,它指向了自己对应的 构造函数

每个原型对象都应该有这个属性!并且要指向正确的自己的构造函数

__proto__

每个 对象 都有 __proto__ 的属性,这个属性就指向了它的原型对象

对象成员访问规则

  • 对象自己有的访问自己的,对象自己没有的,就访问原型对象的

面向对象的三大特征

封装

        把代码封装到方法里(具体一点就是按用途、分类封装到一个对象里的不同方法)

继承

        一个对象拥有另外一个对象的成员

多态

        多种形态

        这个在JS里没有什么体现,因为JS是一个弱类型的语言,所以体现不了多态的优势

 继承

 生活中也有继承,代码中也有继承

例如我要创建中国人、美国人对象

        就准备两套构造函数、一套中国人、一套是美国人的

        发现他们有些行为都是一样的,所以可以抽出来,放到另外一个构造函数里

        让中国人、美国人构造函数继承这个构造函数里的内容,就可以节约代码

如何实现的呢?就是通过修改原型对象来继承

原型链

每个对象都有 __proto__ 属性,指向到自己的原型对象

原型对象也是对象,那也有 __proto__ 属性,指向原型对象的原型对象

像这样的关系像一个链条一样,就称之为原型链

原型链作用:实现继承

为什么说万物皆对象?

        因为所有复杂类型最终的原型链都会流入到 Object 的原型链

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李建雨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值