首页 > 编程语言 >js面向对象编程

js面向对象编程

时间:2023-08-24 17:22:05浏览次数:36  
标签:封装 内部 对象 代码 接口 js 面向对象编程

基本概念

面向对象编程将一个系统抽象为许多对象的集合,每一个对象代表了这个系统的特定方面。对象包括函数(方法)和数据。一个对象可以向其他部分的代码提供一个公共接口,而其他部分的代码可以通过公共接口执行该对象的特定操作,系统的其他部分不需要关心对象内部是如何完成任务的,这样保持了对象自己内部状态的私有性。

类与实例

当我们使用面向对象编程的术语对一个问题进行建模时,我们会创建一系列抽象的定义,这些定义代表了系统中存在的各类对象。例如,如果我们要对一个学校进行建模,我们可能会建立许多用于代表教授的对象,所有教授通常都存在以下属性:教授们都有一个名字;都有一门他们各自所教的课程。此外,所有教授都可以做一些特定的事情,包括:他们可以为学生的论文打分;他们可以在学年的开始向学生介绍自己。

  类只是一种用于创建具体对象的模板。

 继承

如果我们可以用某种特别的方式共享教授和学生中相同属性的声明,那么这会节省我们不少的精力。更准确的说,在某种层级上,二者实际上是同种事物,他们能够具有相同的属性也是合理的。继承(Inheritance)可以帮助我们完成这一操作。

  Professor 类和 Student 类由 Person 类派生(derive)而来。

封装

当其他部分的代码想要执行对象的某些操作时,可以借助对象向外部提供的接口完成操作,借此,对象保持了自身的内部状态不会被外部代码随意修改。也就是说,对象的内部状态保持了私有性,而外部代码只能通过对象所提供的接口访问和修改对象的内部状态,不能直接访问和修改对象的内部状态。保持对象内部状态的私有性、明确划分对象的公共接口和内部状态,这些特性称之为封装(encapsulation)。

 

封装的好处在于,当程序员需要修改一个对象的某个操作时,程序员只需要修改对象对应方法的内部实现即可,而不需要在所有代码中找出该方法的所有实现,并逐一修改。某种意义上来说,封装在对象内部和对象外部设立了一种特别的“防火墙”。

 

标签:封装,内部,对象,代码,接口,js,面向对象编程
From: https://www.cnblogs.com/q-jlv/p/17649238.html

相关文章

  • js实现大文件上传下载
    ​ 一、概述 所谓断点续传,其实只是指下载,也就是要从文件已经下载的地方开始继续下载。在以前版本的HTTP协议是不支持断点的,HTTP/1.1开始就支持了。一般断点下载时才用到Range和Content-Range实体头。HTTP协议本身不支持断点上传,需要自己实现。 二、Range  用于请求头......
  • Electron,VUEJS3,Vite,TypesSript 开发环境配置
    Electron,VUEJS3,Vite,TypesSript开发环境配置项目早期是vue3+vite开发的,后期由于运营需求,要修改为Win安装包。方案还是比较多的:1.WPF-Webview由于目前只需要兼容win,所以可以选择WPF,但WPF需要WebView的,还需要本地架设服务。整体部署比较复杂以及需要熟悉C#与WPF相关开发。2.......
  • jsp实现大文件上传下载
    ​ 这里只写后端的代码,基本的思想就是,前端将文件分片,然后每次访问上传接口的时候,向后端传入参数:当前为第几块文件,和分片总数下面直接贴代码吧,一些难懂的我大部分都加上注释了:上传文件实体类:看得出来,实体类中已经有很多我们需要的功能了,还有实用的属性。如MD5秒传的信息。pub......
  • java裁切NC文件并转成Json
    importcom.alibaba.fastjson.JSONArray;importcom.alibaba.fastjson.JSONObject;importorg.junit.Test;importucar.ma2.Index;importucar.nc2.NetcdfFile;importucar.ma2.Array;importjava.io.FileWriter;importjava.io.IOException;publicclassNetCDF2JS......
  • kettle引入外部js
    //自带的函数参数即为js的路径LoadScriptFile("F:/bigdata-etl/user_center_auto/USER/aes.js");varAESPHONE=PHONE;vardecTel=aesDecrypt(AESPHONE,"ksu7gk4H7Gs9362F")functionaesDecrypt(str,key){varresult_value;try{......
  • 直播商城源码,JS Date配置日期格式化
    直播商城源码,JSDate配置日期格式化引入jsDate配置化diamante Date.prototype.format=function(fmt){  varo={    "M+":this.getMonth()+1,         //月份    "d+":this.getDate(),          //日  ......
  • js全选反选 很重要的 很简洁的 必须掌握的
    <html><head><style>*{margin:0;padding:0;}table{border-collapse:collapse;border-spacing:0;border:1pxsolid#c0c0c0;......
  • zip.js
    functiongetUrlVar(variable){varquery=window.location.search.substring(1);varvars=query.split("&");for(vari=0;i<vars.length;i++){varpair=vars[i].split("=");if(pair[0]==variable){re......
  • JS正则从地址中获取省、市、县
    varadd1='四川省西昌市航天路';varadd2='北京市北京市东城区前门大街1号'varadd3='新疆维吾尔自治区乌鲁木齐市天山区中山路479号';varadd4='四川省成都市双流县幸福社区23号';varadd5='香港特别行政区中西区尖沙嘴路';varreg=/.+?(省......
  • js获取当前时间
    $("#current").html(currentDate(true,true))/*type:true(格式:2018年01月01日) false(格式:2018-01-01)isno:true(包含时分秒:2018-01-0101:01:01) false(不包含时分秒:2018-01-01)*/functioncurrentDate(type,isno){vardate=newDate();varyear=singu......