构造器、原型对象、实例对象

面向过程

函数封装的缺点

1、函数内部定义的局部作用域变量,函数外部无法直接使用
2、函数调用时,会占用大量的系统内存,容易造成数据溢出即数据泄露,被攻击
3、函数一般只是封装一些模块化的功能,由此多个模块化功能需要多个模块式函数,但多次使用同一个功能时,将会创建多个功能函数所占用的系统空间,对内存是一种浪费

面向对象

核心

将多个模块化的函数,存储到原型对象中,将多次即使用次数高的变量或函数,存储到对象的实例化对象中去,例如:

function Person(){
        }
        //以下4行内容存储在原型对象中
        Person.prototype.name = "Nicholas";
        Person.prototype.age = 29;
        Person.prototype.job = "Software Engineer";
        Person.prototype.sayName = function(){
            window.alert(this.name);
        };
        let person1 = new Person();
        let person2 = new Person();
        person1.name = "Greg";   //存储在实例化对象中
        window.alert(person1.name);//显示为Greg  来自实例化对象
        window.alert(person2.name);//显示为Nicholas  来自原型对象中
        //如果实例化对象中不存在该属性值,将会前往原型对象中查找值
        delete person1.name;
        window.alert(person1.name);  //显示为Nicholas  来自原型对象中

代码通俗解释:
以上出现了两种类型的存储空间:①原型对象②实例化对象
存在三个空间:①构造函数prototype指针指向的原型对象②实例化对象person1③实例化对象person2
属性值输出过程:首先实例化对象会查找该对象中是否存在该属性,若不存在,即前往_proto_指针指向的原型对象查找,若同样不存在即返回undefined,若两者之一存在或都存在调用的属性,则返回对应的属性值。
在这里插入图片描述说明1:Student为构造函数 ,stu1与stu2为实例化对象,其中构造函数包含prototype指针,实例化对象中包含_proto_指针,两者都指向原型对象。
说明2:原型对象中包含constructor指针,指向构造函数。
**实质上:**每一个函数都包含prototype指针。

面向对象优点

由以上可知,当调用多次使用的模块化函数是,调用原型对象中方法,实质上是引用方法,并非创建一个新的内存空间。
总结:
①可以存储多个数据单元以及所有js支持的数据类型
②调用数据时无须考虑数据的顺序
③可以通过对象中函数的this方便调用对象本身的数据
高内聚:将所有需要的程序,都定义封装在对象内,对象中存储所有需要的属性和方法
低耦合:尽量减少特殊程序的执行
面向对象编程特点:
抽象–将各不同对象的共有特点来抽象化为一个对象实例
—逆战班

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值