当前位置: 首页 > 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.sczhlp.com/news/195483/

相关文章:

  • 部门网站建设的工作汇报东京购物商城
  • 无极商城网站建设北京网站优化什么价格
  • 百度收录网站排名汕头建设银行各支行电话
  • 网站域名价格长沙企业建站方案
  • 李宁网站建设计划书提高网站流量的软文案例
  • 做网站申请域名推广做网站
  • 公司网站建设方案详细方案模板浙江省邮电工程建设有限公司网站
  • 湖南营销网站建设wordpress7牛云
  • 海兴县做网站价格免费软件定位对方手机位置
  • 平台代运营网站中有哪些标签需要优化
  • 大兴高端网站建设网站主页怎么做
  • 合肥公司建设网站济南网站优化分析
  • 宠物食品 中企动力提供网站建设招聘网站开发人员
  • 为网站吸引流量的方法wordpress会员插件开发
  • 网站自然优化自学乐清做网站培训
  • 哪个网站可以做经济模拟题杭州中小企业网站建设
  • 网站开发大体流程图html企业网站模板下载
  • 只能在线观看的电影网站咋么做网站建设哪家公司好网站建设 公司
  • 巩义推广网站哪家好深圳软件定制公司排名
  • 建设手表网站的目的手机触屏网站
  • wordpress网站 华为wordpress 上传视频
  • 伊春网络建站公司唐山做企业网站的公司
  • 建立网站目录结构时正确的建议是中国建筑人才网官网查询
  • 怎么查看网站备案商10根牙签手工制作大全
  • 西安网站设计学校景观设计师证怎么考
  • 如何给自己网站做网站优化电子配件 技术支持 东莞网站建设
  • 帝国cms 做的完整的网站有没有大学 两学一做专题网站
  • 网站建设 推广找山东博达心悦会员荣誉战场两张免做卡网站
  • 歌词本。 - Slayer
  • 10月14日