1-1 类

  1. /*function Person(name,age){
  2. this.name = name
  3. this.age = age
  4. }
  5. Person.prototype = {
  6. constructor:Person,
  7. sayName(){
  8. console.log(this.name);
  9. }
  10. }*/
  11. class Person{
  12. constructor(name,age){ // constructor 函数--构造一个对象的函数
  13. this.name = name;
  14. this.age = age
  15. }
  16. sayName(){
  17. console.log(this.name);
  18. }
  19. }
  20. Person.prototype.sayAge = function(){
  21. console.log(this.age);
  22. }
  23. // 不允许以字面量的形式去添加属性的
  24. /* Person.prototype = {
  25. sayAge(){
  26. console.log(this.age);
  27. }
  28. } */
  29. var p = new Person("cheng",19)
  30. console.log(p);
  31. p.sayAge() // 19

1-2 Object.assign

  1. 可以在原型上添加多个属性
  1. class Person{
  2. constructor(name,age){
  3. this.name = name;
  4. this.age = age;
  5. }
  6. sayName(){
  7. console.log(this.name);
  8. }
  9. }
  10. Object.assign(Person.prototype,{
  11. sayAge(){
  12. console.log(this.age);
  13. },
  14. show(){
  15. console.log("show");
  16. }
  17. })
  18. var p = new Person("cheng",18)
  19. console.log(p.constructor == Person); // true
  20. p.sayAge() // 18
  21. console.log(p);

1-3 类继承

  1. class Person{
  2. constructor(name,age){
  3. this.name = name;
  4. this.age = age
  5. }
  6. sayName(){
  7. console.log(this.name);
  8. }
  9. }
  10. class Teacher extends Person{
  11. // 类继承之后,构造函数第一行必须写super关键字,去继承父类的属性
  12. constructor(name,age,skill){
  13. super(name,age)
  14. this.skill = skill
  15. }
  16. // 在子类的方法中调用父类的方法 (this或super去调用)
  17. show(){
  18. super.sayName()
  19. // this.sayName()
  20. }
  21. }
  22. var t = new Teacher("zhang",18,"js")
  23. console.log(t);
  24. t.sayName()

1-4 静态属性和静态方法

  1. 通过 static 关键字定义静态方法和属性,不能在类的实例上调用静态方法,而应该通过类本身调用
  2. 属于类所独有的
  3. 特点:通过类名去调用

1-4-1 静态属性

  1. class Person{
  2. static BaseUrl = "https://www.baidu.com";
  3. }
  4. console.log(Person.BaseUrl) // 通过类名去调用

1-4-2 静态方法

  1. class Person{
  2. constructor(name,age){
  3. this.name = name
  4. this.age = age
  5. }
  6. static sayName(){
  7. console.log("name");
  8. }
  9. }
  10. var p = new Person("lisi",19)
  11. console.log(p);
  12. Person.sayName()

1-4-2-1 静态方法和普通函数

  1. 1.在普通函数中能调用静态方法
  2. 2.在静态方法中不能调用普通方法
  1. class Person{
  2. constructor(name,age){
  3. this.name = name
  4. this.age = age
  5. }
  6. sayAge(){
  7. sayName()
  8. console.log(this.age);
  9. }
  10. static sayName(){ // 在静态方法中,this指-->调用静态方法的类
  11. // this.sayAge()
  12. console.log("name");
  13. console.log(this); // Person
  14. }
  15. }
  16. var p = new Person("name",18)
  17. Person.sayName()

1-5 继承静态方法和静态属性

  1. 1.子类可以继承父类的静态方法
  2. 2.在子类的静态方法中调用父类的静态方法,用superthis去调用
  1. class Person{
  2. static BaseUrl = "https://www.baidu.com"
  3. static sayName(){
  4. console.log("name");
  5. }
  6. }
  7. class Teacher extends Person{
  8. static show(){
  9. super.sayName()
  10. // this.sayName()
  11. console.log(super.BaseUrl);
  12. }
  13. }
  14. // Teacher.sayName()
  15. Teacher.show()

1-6 总结

  1. 1.静态方法:静态方法是类所独有的,类创建的时候,就会在内存中存在,不用实例化,
  2. 直接通过类名调用,不会造成系统资源的格外浪费
  3. 2.不可以在静态方法中调用普通方法
  4. 3.在静态方法中,this指调用静态方法的类
  5. 4.静态方法是可以被继承的