node class 面向对象编程

一. nodejs中this的理解

node 中全局变量是golbal , 浏览器中全局是window
1.全局中的this指向的是module.exports。(指向 == 等同)
2.函数this指向global
3.构建函数中的this指向他的实例,而不是global

二. Class

类的数据类型就是函数,类本身就指向构造函数。
注: js 的 class 其实只是个语法糖,它依然是通过原型链来实现继承的

  • 1.构建函数、原型、实例关系:
    每个构建函数都有一个原型对象,原型对象都包含一个指向构建函数的指针,而实例都包含一个指向原型对象的内部指针。

  • 2.面向对象 (Object-oriented programming => OOP) :
    对象則指的是类的实例
    在这里插入图片描述

1. constructor方法

constructor方法是类的默认方法,通过new命令生成对象实例时,自动调用该方法。
实例对象:

   var Point  = new point(1,3);

name属性:

class Point {}
console.log(Point.name)        // "Point"

class表达式(与函数一样,Class也可以使用表达式的形式定义。):

const MyClass = class Me {
getClassName() {
return Me.name;
  }
};
console.log(MyClass.name)           // Me

2. class继承

__ Class之间可以通过extends关键字,实现继承。子类会继承父类的属性和方法。__

class dad {
    constructor(a, b) {
        this.a = a;
        this.b = b;
    }
    fuc0() {
        return this.a + this.b
    }
}
class son extends dad {
    constructor(num, x, y) {
        super(x,y);
        this.num = num;
    }
    message(){
        let age = super.fuc0();
        return this.num + age
    }
}
let orm= new son(100,1,2)
console.log(orm.message())

注: ColorPoint继承了父类的方法,super方法调用父类方法。

3. 静态方法

类相当于实例的原型,所有在类中定义的方法,都会被实例继承。如果在一个方法前,加上static关键字,就表示该方法不会被实例继承,而是直接通过类来调用,这就称为“静态方法”。

class Test {
  static reduce(a, b) {
    return this.sum(a, b);
  }
  static sum(a, b) {
    let sum = a + b;
    return sum
  }
}                                
console.log(Test.reduce(33,33))                   // 66
class test1 extends Test {
  static extend(a, b, c) {
    let aaa = super.reduce(a, b)
    return aaa * c
  }
}
console.log(test1.extend(1, 25, 4))              // 104          

注:

  1. 同一个class上静态方法之间可以互相调用,这里this指向的是class本身
  2. 实例上调用静态方法会抛出一个error,
  3. 静态方法可以与非静态重名
  4. 父类静态方法可以被子静态继承。

4. class内部使用 get/set

对某个属性设置存值函数和取值函数,拦截该属性的存取行为。定义的属性相当于“存储器属性”。

class Num {
  constructor(num) {
    this._num = num;
  }
  get num() {
    return this._num;
  }
  set num(num) {
    this._num = num;
  }
}
var test = new Num(9);

console.log(test.num);         // 9
test.num = 99;
console.log(test.num);         // 99
发布了14 篇原创文章 · 获赞 4 · 访问量 267

猜你喜欢

转载自blog.csdn.net/nodeDocker/article/details/100170232
今日推荐