属性继承

  1. function Person(name,age){
  2. this.name = name;
  3. this.age = age;
  4. }/构造函数中this指向实例对象/
  5. function Teacher(name,age,skill){
  6. // var self = this;
  7. Person.call(self,name,age)
  8. this.skill = skill;
  9. }
  10. var t = new Teacher("zhang",18,"js");
  11. console.log(t)

方法继承

  1. function Person(name,age){
  2. this.name = name;
  3. this.age = age;
  4. }
  5. Person.prototype.sayName = function(){
  6. console.log(this.name)
  7. }
  8. function Teacher(name,age,skill){
  9. Person.call(this,name,age)
  10. this.skill = skill;
  11. }
  12. Teacher.prototype = Person.prototype;//将地址值传给了Teacher的prototype,这样就继承了Person的方法
  13. Teacher.prototype.sayAge = function(){
  14. console.log(this.age)
  15. }
  16. //未赋值之前Teacher的prototype的地址是Person的prototype地址,现在用Teacher覆盖
  17. Teacher.prototype.constructor = Teacher;
  18. var t = new Teacher("zhang",18,"js");
  19. var p = new Person("lisi",13);
  20. console.log(t)
  21. console.log(t.constructor)

class类的继承

  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. this.sayName();
  19. // super.sayName();
  20. }
  21. }
  22. var t = new Teacher("zhang",18,"js");
  23. console.log(t)

静态属性,静态方法

属于类所独有的
特点:通过类名去调用

  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. Person.sayName()

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

  1. class Person{
  2. constructor(name,age){
  3. this.name = name;
  4. this.age = age;
  5. }
  6. sayAge(){
  7. Person.sayName();
  8. console.log(this.age);
  9. }
  10. static sayName(){
  11. // this.sayAge();添加此句则报错
  12. console.log("name")
  13. }
  14. }
  15. var p = new Person("name",18)
  16. Person.sayName();
  17. p.sayAge();

1.子类可以继承父类的静态方法
2.在子类的静态方法中调用父类的静态方法,可以通过super/this去调用

  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 sayAge(){
  9. super.sayName();
  10. console.log(super.baseUrl)
  11. console.log("age");
  12. }
  13. }
  14. Teacher.sayAge()
  15. console.log(Teacher.baseUrl)