7.属性的封装.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. "use strict";
  2. // 属性的封装:令属性更加安全
  3. (function () {
  4. /**
  5. * readonly 只读
  6. * static
  7. * public 共有的
  8. * private 私有的 只能在当前类中访问及修改
  9. * 若想要更改 则需在类中定义方法
  10. * protected 受保护的 只能在当前累及当前类的子类中访问及使用
  11. */
  12. class Person {
  13. constructor(name1, age1) {
  14. this.age1 = age1;
  15. this.name1 = name1;
  16. }
  17. /**
  18. * 在属性的封装中
  19. * getter 获取属性值 get
  20. * setter 设置属性值 set
  21. */
  22. get name() {
  23. return this.name1;
  24. }
  25. set name(value) {
  26. this.name1 = value;
  27. }
  28. get age() {
  29. return this.age1;
  30. }
  31. set age(value) {
  32. if (value > 0) {
  33. this.age1 = value;
  34. }
  35. }
  36. }
  37. let p = new Person("孙悟空", 20);
  38. // p.name = "猪八戒";
  39. // p.age = 10;
  40. // console.log(p.getName());
  41. // console.log(p.setName("哈哈"));
  42. // console.log(p.setAge(-10))
  43. p.name = '小小';
  44. p.age = 1;
  45. console.log(p);
  46. console.log(p.name);
  47. // console.log(Person.age)
  48. // class A {
  49. // public name: string;
  50. // public age: number;
  51. // constructor(name: string, age: number) {
  52. // this.name = name;
  53. // this.age = age;
  54. // }
  55. // }
  56. // class A {
  57. // constructor(public name:string,public age:number) {
  58. // this.name = name
  59. // this.age = age
  60. // }
  61. // }
  62. class B {
  63. constructor(num) {
  64. this.num = num;
  65. }
  66. }
  67. class C extends B {
  68. say() {
  69. console.log(this.num);
  70. }
  71. }
  72. let c = new C(100);
  73. console.log(c);
  74. // C.num = 1;
  75. })();