当前位置: 首页 > news >正文

苏州企业网站建设公司品牌网站开发动态模块

苏州企业网站建设公司,品牌网站开发动态模块,做网站上传照片的尺寸,现在较为常用的网站开发技术假期第八篇#xff0c;对于基础的知识点#xff0c;我感觉自己还是很薄弱的。 趁着假期#xff0c;再去复习一遍 面向对象#xff1a;程序中所有的操作都需要通过对象来完成 计算机程序的本质就是对现实事物的抽象#xff0c;抽象的反义词是具体。比如照片是对一个具体的…假期第八篇对于基础的知识点我感觉自己还是很薄弱的。 趁着假期再去复习一遍 面向对象程序中所有的操作都需要通过对象来完成 计算机程序的本质就是对现实事物的抽象抽象的反义词是具体。比如照片是对一个具体的人的抽象汽车模型是对具体汽车的抽象等。 在程序中所有的对象被分成两个部分数据和功能。以人为例人的姓名性别年龄身高体重等属于数据人可以走路说话吃饭睡觉这些属于人的功能数据在对象中被称为属性而功能称之为方法 1、接口 接口与类型声明很相似类型声明使用type关键字定义接口Interface使用Interface关键字定义 类型声明可以描述一个对象的类型对对象进行限制可以用来定义基本类型、联合类型、交叉类型、元组类型等 type myType {name: string,age:number }const obj: myType {name: 莲花,age:38 } 类型声明相同的名只能声明一次 接口同样可以描述一个对象的类型对对象进行限制 接口也可以当作类型声明去使用接口也是用来定义一个类结构用来定义一个类中应包含哪些属性和方法多了少了都会波浪线提示 interface myInterface {name: string,age:number }const obj: myInterface {name: 莲花,age:38 } 但是接口可以重复声明 接口主要用于描述对象的结构和类型因此更适用于被实现或继承的情况。 接口可以在定义类的时候去限制类的结构 接口中的所有属性都不能有实际的值 接口只定义对象的结构而不考虑实际的值 在接口中所有方法都是抽象方法 interface Person {name: string;age: number;sayHello(): void; }接口支持一些类型声明不支持的特性例如可选属性、只读属性、函数类型等。 interface Person {name: string;age?: number; // 可选属性readonly id: number; // 只读属性sayHello(): void; // 函数类型 }类型声明不支持定义可选属性、只读属性等但支持联合类型、交叉类型等高级类型的定义比接口更加灵活。 type Person {name: string;age: number; } {gender: male | female; // 交叉类型 } | {gender?: string; // 联合类型 };类型声明主要用于定义类型别名和复杂类型 type Age number;type Person {name: string;age: Age; };type Gender male | female;type PersonInfo {name: string;age: Age;gender: Gender; };2、属性的封装 为什么需要属性的封装当通过class定义类通过实例对象可以随意修改属性对于一些特定的属性比如钱比如年龄都不应该被随意的修改属性如果可以任意被修改将导致对象中的数据变得非常不安全 class Person {name: string;age: number;constructor(name: string, age: number){ this.name name,this.age age}}const person1 new Person(莲花, 18) person1.name 楼楼 person1.age -38 console.log(person1, person1)很显然年龄不应该是负数但是因为对象属性可以任意修改如果有需要用到年龄做计算的地方一定是会出错的。 那如果不希望被随意修改可以在属性前添加属性的修饰符 访问修饰符包括三种 public公共的可以在类的内部和外部访问默认值为 public。 private私有的只能在类的内部访问修改。 protected受保护的只能在类的内部和派生类中访问。 class Person {private name: string;protected age: number;public gender: string;constructor(name: string, age: number, gender: string) {this.name name;this.age age;this.gender gender;}public sayHello() {console.log(Hello, my name is ${this.name}, Im ${this.age} years old.);} }class Student extends Person {public grade: number;constructor(name: string, age: number, gender: string, grade: number) {super(name, age, gender);this.grade grade;}public study() {console.log(${this.name} is studying in grade ${this.grade}.);} }const person new Person(Alice, 18, female); console.log(person.name); // 编译错误name 是 private 属性只能在类的内部访问 console.log(person.age); // 编译错误age 是 protected 属性只能在类的内部和派生类中访问 console.log(person.gender); // 可以访问gender 是 public 属性 person.sayHello(); // 可以访问sayHello 是 public 方法const student new Student(Bob, 16, male, 10); console.log(student.name); // 编译错误name 是 private 属性只能在类的内部访问 console.log(student.age); // 编译错误age 是 protected 属性只能在类的内部和派生类中访问 console.log(student.gender); // 可以访问gender 是 public 属性 student.sayHello(); // 可以访问sayHello 是 public 方法 console.log(student.grade); // 可以访问grade 是 public 属性 student.study(); // 可以访问study 是 public 方法如果想获取Person 中定义为私有属性的name可以通过定义方法向外暴露属性和修改属性虽然同样可以修改但是属性的访问权是内部定的暴露出来才可以访问不暴露就是私有属性 class Person {private name: string;protected age: number;public gender: string;constructor(name: string, age: number, gender: string) {this.name name;this.age age;this.gender gender;}public sayHello() {console.log(Hello, my name is ${this.name}, Im ${this.age} years old.);}//定义方法用来获取name属性getName() {return this.name}//定义方法用来设置name属性从外面传入valuesetName(value:string) { this.name value} }const person new Person(Alice, 18, female); person.getName(); // 可以访问,间接的拿到name属性 person.setName(张丫丫)上面提到的年龄不可以设置负数也就可以通过方法进行限制 getter方法用来读取属性setter方法用来设置属性它们被称为属性的存取器 getAge() { return this.age}setAge(value: number) {//先判断年龄是否合法if (value 0) { return this.age value}}3、泛型 泛型是一种在编译时还不确定具体类型的变量或函数。使用泛型可以增加代码的灵活性和可重用性使代码更加通用化 假如我们知道参数的类型方法的返回值类型可以这样写 function fn(a: number): number { return a } fn(1)假如有些情况下不知道参数和返回的具体类型是什么类型可以写成any确实可以但是any实际上会关闭掉ts中的类型检查 参数是any返回值是any就有可能参数是字符串返回值是数值 function fn(a: any): any{ return a } fn(1)所以在定义函数或类的时候类型不明确就可以使用泛型 在方法名后面用尖括号大写的T或者任意大写字母都可以 泛型T只有在函数执行的时候才知道具体是什么类型 两种方法调用 function fnT(a: T): T { return a }// 方法一直接调用,不知道泛型TS也可以自动对类型进行推断 fn(1) // 方法二手动指定泛型如果有很复杂的情况类型推断无法推断的时候 fnstring(1)泛型可以指定多个 function fn2T,K(a: T,b:K): T { console.log(b);return a }fn2(10,嘻嘻嘻) 或 fn2 number,string(10,嘻嘻嘻)如果想限制泛型的范围定义一个接口希望泛型是实现Inter接口的类 //T extends Inter 表示泛型必须是Inter的实现类子类 传参的时候要有length属性传数字没有会提示类型’number’的参数不能赋值给类型’Inter’的参数因为数字里没有length 传字符串或有length属性的对象就可以
http://www.sadfv.cn/news/370888/

相关文章:

  • 厦门网站制作计划动漫设计招聘信息
  • 金昌北京网站建设网站开发 资质
  • 怎么做网站的搜索引擎建筑工程包括哪些内容
  • 网站建设和前端开发的区别西安360免费做网站
  • 苏州中设建设集团有限公司网站阿里巴巴网站怎么做全屏大图
  • 正规网站建设建设公司天津做网架公司
  • 仿魔酷阁网站源码建站cms
  • 网站建设多少价格青岛李沧网站建设
  • 诚信通与网站建设区别wordpress 开放适配
  • 流量查询网站网站建设需求调查问卷
  • 怎么做自我介绍网站动漫男的和女的做视频网站
  • 网站建设各模块功能简述网络服务提供者发现未成年通过网络发布
  • 宁夏住房和城乡建设部网站浩森宇特北京网站设计
  • 道客网站建设推广小程序百度一下搜索
  • 昆山专业做网站seo兼职58
  • 免费收录网站属于免费推广的方式是
  • 怎么建设一个网站并顺利打开浏览建站费用报价单
  • 网站设计 卡片式设计免费游戏不用登录大全
  • 怎么让百度多收录网站写作网站好吗
  • 做网站推淘宝客网站建设属于哪种公司
  • 建新建设集团有限公司网站网站做文献格式
  • 肯尼亚网站域名合肥高端网站建设设计公司
  • 网站seo诊断评分63专业的网站开发服务商
  • 中国做出口的网站平台厦门网站建设、
  • 贵阳网站开发工作室上海电商网站建设费用
  • ps个人网站首页怎么制作python流星雨特效代码
  • flash 网站源码wordpress 淘宝客 采集
  • 网站建设公司有哪些比较知名的成都网站建设外贸
  • 河北邯郸ktv选择一个网站进行优化
  • 对网站建设的维护网络营销产品有哪些特点