企业网站定制开发js中的Class类详解

目录


什么是类?

class 企业网站定制开发类是一种抽象的体现,企业网站定制开发用来表示具有相同特性企业网站定制开发的一类事物,企业网站定制开发是面向对象编程()企业网站定制开发不可缺少的工具。

定义一个简单的类

定义一个类为Person,每个Person都会跑,都有名字

  1. class Person {
  2. constructor(surname, name) {
  3. this.surname = surname
  4. this.name = name
  5. }
  6. work() {
  7. console.log("我们会一直跑");
  8. }
  9. getName() {
  10. return this.surname + this.name
  11. }
  12. }
  13. const p1 = new Person("张", "三")
  14. p1.work()
  15. console.log(p1.getName());

毫无疑问执行代码肯定会打印 我们会一直跑 和 张三

看一下Person类 和 Person的实例 

可以看到 Person实例的[[Prototype]]是指向Person的prototype的 

但是为什么Person实例多出来的两个属性?

因为在new Person实例的时候,执行了constructor函数, 可以把它叫做构造器函数,这个构造器函数的this执行了实例, 所以给p1实例增加了俩个属性 name, surname,大家不用往上看了

  1. constructor(surname, name) {
  2. this.surname = surname
  3. this.name = name
  4. }

其实上面的现象都是在new 一个类实例的结果,接下来看看new一个实例发生了什么

new 一个类发生了什么

  1. 在堆空间创建一个对象
  2. 对象的[[Prototype]]指向其构造函数的prototype的
  3. constructor 中this被赋值为这个对象
  4. 执行 constructor构造器函数 给对象创建属性
  5. 最后一点  如果constructor函数内返回了一个对象,则实例就是该对象,反之实例就是刚刚在堆内存中创建的对象

针对第五步的代码示例

  1. class Person {
  2. constructor(surname, name) {
  3. this.surname = surname
  4. this.name = name
  5. return { a: 1 }
  6. }
  7. work() {
  8. console.log("我们会一直跑");
  9. }
  10. getName() {
  11. return this.surname + this.name
  12. }
  13. }
  14. const p1 = new Person("张", "三")
  15. console.dir(Person);
  16. console.dir(p1);

类的静态属性和实例属性

实例属性是所有的实例都可以访问的属性,静态属性是只有类本身才能访问的, 静态属性通过来定义,或者直接Person.xxx

假设Person有一个秘密,只有他自己可以访问到

  1. class Person {
  2. constructor(surname, name) {
  3. this.surname = surname
  4. this.name = name
  5. return { a: 1 }
  6. }
  7. work() {
  8. console.log("我们会一直跑");
  9. }
  10. getName() {
  11. return this.surname + this.name
  12. }
  13. static secret() {
  14. return "我的秘密是 xxxxxx"
  15. }
  16. }
  17. const p1 = new Person("张", "三")
  18. console.log(Person.secret());
  19. try {
  20. p1.secret()
  21. } catch (error) {
  22. console.log(error);
  23. }
  24. console.dir(Person);

细心的同学可能已经发现了,通过static关键字设置的静态属性直接挂在Person类对象上了,实例属性都是挂在prototype上的,这更加验证了new关键字的五个步骤

类的私有属性

我们可以为每一个类实例都定义私有属性,在生活中每个人都有个人隐私,比如说女生不愿意透露的身高体重等等,在类中也可以实现类似的

  1. class Person {
  2. #height
  3. constructor(surname, name) {
  4. this.surname = surname
  5. this.name = name
  6. this.#height = "120cm"
  7. }
  8. work() {
  9. console.log("我们会一直跑");
  10. }
  11. getName() {
  12. return this.surname + this.name
  13. }
  14. secret() {
  15. console.log(this.#height);
  16. return "我的秘密是 xxxxxx"
  17. }
  18. }
  19. const p1 = new Person("张", "三")
  20. console.dir(p1);
  21. p1.secret()

类的私有属性只能在当前类中访问,对照上面的代码就是只能在secret中访问,类之外的地方访问就会报以下的错

继承

继承是面对对象编程的三大特性之一,js中通过extends来实现继承,需要注意的是字类继承父类时需要调用super函数,作用就是调用父类的constructor,还要注意不要再super前访问this

  1. class Father {
  2. constructor(money) {
  3. this.money = 1000000
  4. }
  5. }
  6. class Son extends Father {
  7. constructor() {
  8. super()
  9. }
  10. }
  11. const S1 = new Son()
  12. console.dir(S1);

暂时就先说这么多,后续有发现再补充

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发