ES5的类创建方式

  1. // 最简单的类
  2. function Person(name){
  3. // 构造函数的属性
  4. this.name = name;
  5. this.age = 18;
  6. }
  7. let xiaoming = new Person('小明');
  8. console.log(`${xiaoming.name}今年${xiaoming.age}岁`);
  9. // 构造函数 原型链上增加方法
  10. function Animal(name="小白"){
  11. // 构造函数的属性
  12. this.name = name;
  13. this.obj = {
  14. name : this.name
  15. }
  16. // 构造函数的方法
  17. this.run = function(){
  18. console.log(`${this.name}在奔跑!` );
  19. }
  20. }
  21. // 原型链上的属性
  22. Animal.prototype.sex = '男';
  23. // 原型链上的方法
  24. Animal.prototype.cry = function(v){
  25. // 传值
  26. console.log(`调用原型链上的方法并且 - ${v}`);
  27. // 直接调用构造函数的属性
  28. console.log(`得到构造函数的属性${this.name} ${this.obj}`);
  29. }
  30. let dog = new Animal('大白');
  31. console.log(dog.name);
  32. dog.run()
  33. console.log(dog.obj.name);
  34. console.log(dog.sex);
  35. // 调用方法后可以传值
  36. dog.cry('传值')

ES5继承

function Person(name,sex) {
  // 构造函数的属性
  this.name = name;
  this.age = 18;
  this.sex = sex
  this.run = function (age) {
    console.log(this.name, age,this.sex);
  }
}
Person.prototype.dog = function () {
  //  原型对象获取构造函数的属性
  console.log(this.name, this.age);
}
const ming = new Person('小明','男')
ming.run(18)
ming.dog()  

//  1、原型链+对象冒充的组合继承模式,web类继承Animal类,  
function Web(nameVal,sexVal){
  // 这里需要接受一个参数 才能使用构造函数的形参
  Person.call(this,nameVal,sexVal)  //  点睛之笔
}
const w = new Web('小红','女');
w.run(1);//只能调用构造函数自己的属性方法。原型链上的无法调用(报错);

// 2、原型链继承
function Inherit(){};
//  通过原型链来继承
Inherit.prototype = new Person('小环','女'); //..构造函数的形参传值
const In = new Inherit();
In.run(18)  //  继承构造函数的方法;
In.dog()  //  继承构造函数的方法;