1. constructor函数--构造一个对象的函数<br /> 特点:<br /> 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. /* 不允许以字面量的形式去添加属性的 */
  11. Person.prototype = {
  12. sayAge(){
  13. console.log(this.age)
  14. }
  15. }
  16. var p = new Person("cheng",20);
  17. p.sayAge()

1.Object-assign

Object.assign可以在原型上添加多个属性

  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)

2.Stack

栈的数据结构

  1. var arr = [0,1]
  2. arr.push(2);
  3. arr.pop();
  4. console.log(arr)
  5. /* peek获取处于 */
  6. function peek(){
  7. }

3.class-Stack

  1. 栈数据结构的特点:后进先出 例子水杯,谷仓,米袋就是栈的数据结构<br /> 1.push<br /> 2.pop //将栈顶的数据出栈<br /> 3.peek 获取栈顶的数据<br /> 4.isEmpty判断栈是否为空<br /> 5.size返回栈的长度<br />location路由 是以栈的数据结构去保存路由的
  1. class Stack{
  2. constructor(){
  3. this.items = [];
  4. }
  5. push(value){
  6. this.items.push(value)
  7. }
  8. pop(){
  9. return this.items.pop();
  10. }
  11. peek(){
  12. return this.items[this.items.length-1]
  13. }
  14. isEmpty(){
  15. return this.items.length==0;
  16. }
  17. size(){
  18. return this.items.length;
  19. }
  20. }
  21. var s = new Stack();
  22. s.push(8);
  23. s.push(9);
  24. console.log(s.isEmpty())

4.class-extends

继承
super 就是指父类

  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)

5.static

静态属性,静态方法
属于类所独有的
特点:通过类名去调用

  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()

6.静态方法和普通方法

1.在普通方法中能调用静态方法
2.在静态方法中不能调用普通方法

  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();

7.static-this

静态方法:
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. console.log(this)
  12. console.log("name")
  13. }
  14. }
  15. Person.sayName();

8.静态方法和继承

  1. 1.子类可以继承父类的静态方法<br /> 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(Person.baseUrl)

9.总结

  1. 1.如何使用class去定义一个类
  2. eg:定义一个学生类,包含name-age两个属性,还包含sayName
  3. 2.如何给一个类的原型上去添加多个属性/方法
  4. 3.如何实现继承
  5. 4.如何定义一个静态方法
  6. 5.静态方法的特点
  7. 5-1 通过类名调用
  8. 5-2 不可以在静态方法中调用普通方法
  9. 5-3 this指向问题-->类
  10. 5-4 静态方法是可以被继承的。