Blogger Information
Blog 60
fans 5
comment 3
visits 65255
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
ES6中类的继承以及抽象类的实现
longlong
Original
1243 people have browsed it

1. 使用原生的方式实现类的继承

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>类的继承:原生方式</title>
  7. </head>
  8. <body>
  9. <script>
  10. // 父类
  11. function Phone(brand, price) {
  12. // 属性
  13. this.brand = brand;
  14. this.price = price;
  15. }
  16. // 公共方法/原型方法
  17. Phone.prototype.show = function () {
  18. return `手机品牌: ${this.brand}\n价格: ${this.price}\n`;
  19. };
  20. console.dir(Phone);
  21. // 子类
  22. function Tel(brand, price, color) {
  23. // 借助call()函数,实现继承,可传入父类中的参数
  24. Phone.call(this, brand, price);
  25. this.color = color;
  26. }
  27. console.dir(Tel);
  28. // 更新子类的原型对象
  29. Tel.prototype = Object.create(Phone.prototype);
  30. // 手工补上constructor
  31. Tel.prototype.constructor = Tel;
  32. // 子类重写父类中的方法
  33. Tel.prototype.show = function () {
  34. return Phone.prototype.show.call(this).concat(`${this.color}`);
  35. };
  36. // 实例化子类
  37. const apple = new Tel("苹果", 5500, "银色");
  38. console.log(apple.show());
  39. const vivo = new Tel("Vivo", 3800, "红色");
  40. console.log(vivo.show());
  41. // ƒ Phone(brand, price)
  42. // ƒ Tel(brand, price, color)
  43. // 手机品牌: 苹果
  44. // 价格: 5500
  45. // 银色
  46. // demo1.html:42 手机品牌: Vivo
  47. // 价格: 3800
  48. // 红色
  49. </script>
  50. </body>
  51. </html>

2. 使用ES6实现类的继承

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>使用ES6实现类的继承</title>
  7. </head>
  8. <body>
  9. <script>
  10. // 父类
  11. class Dad {
  12. // 构造方法
  13. constructor(name, email) {
  14. this.name = name;
  15. this.email = email;
  16. }
  17. // 原型方法
  18. show() {
  19. return `姓名:${this.name}\n邮箱:${this.email}\n`;
  20. }
  21. }
  22. // 子类
  23. class Son extends Dad {
  24. constructor(name, email, age) {
  25. // super() 调用父类中的构造方法
  26. super(name, email);
  27. this.age = age;
  28. }
  29. // 重写父类中的原型方法
  30. show() {
  31. // return `${super.show()}年龄:${this.age}`;
  32. // super 调用父类中的原型方法
  33. return super.show().concat(`年龄:${this.age}`);
  34. }
  35. }
  36. // 实例化子类
  37. const son = new Son("jack", "jack@qq.com", 20);
  38. console.log(son.show());
  39. </script>
  40. </body>
  41. </html>

3. ES6抽象类的实现

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>ES6实现抽象类</title>
  7. </head>
  8. <body>
  9. <script>
  10. // 抽象类:不能实例化,可以继承
  11. // 父类
  12. class A {
  13. constructor() {
  14. // new.target属性:一般用于构造函数中
  15. // 1. 当在class内部调用时,会返回当前class名
  16. // 2. 当有子类继承时,会返回子类
  17. // 3. 此属性就是用于检查new的时候作用于哪个构造函数
  18. if (new.target === A) {
  19. throw new Error("本类不允许被实例化");
  20. }
  21. }
  22. }
  23. // 子类
  24. class B extends A {
  25. constructor(length, width) {
  26. super();
  27. this.length = length;
  28. this.width = width;
  29. }
  30. show() {
  31. return `长:${this.length} * 宽:${this.width} = 面积:${
  32. this.length * this.width
  33. }`;
  34. }
  35. }
  36. // 实例化
  37. // 1. 实例化父类 报错
  38. // const demo1 = new A();
  39. // Uncaught Error: 本类不允许被实例化
  40. // 2. 实例化子类
  41. const demo2 = new B(2, 5);
  42. console.log(demo2.show());
  43. // 长:2 * 宽:5 = 面积:10
  44. </script>
  45. </body>
  46. </html>
Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:看来你是自学了,new.target咱们课上并没说 . 不错 , 为你的自学精神打call
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post