一. 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
注:
- 同一个class上静态方法之间可以互相调用,这里this指向的是class本身
- 实例上调用静态方法会抛出一个error,
- 静态方法可以与非静态重名
- 父类静态方法可以被子静态继承。
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