1.方法的定义
有没有冒号,是不是生成器,是不是异步.
然后去组,最少两种.
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Functions/Method_definitions
2.constructor和super
constructor和super要连起来讲,不能分开.
所谓的super和constructor是由很强的联系的,不能分开讲.我们一听书面化的介绍就是constructor是构造函数,如果你不给他写,它自己就会构造一个空的,名字是constructor的函数,这称为构造函数.是一种用于创建和初始化class
创建的对象的特殊方法。这很屁话.那他到底干嘛,讲句难听点,我一定要这个吗,你类里面给我写了接口,难道我不能自己搞,绕开你?这当然室是有很重大的干系的.至于super关键字用于访问和调用一个对象的父对象上的函数。这更是屁话,难道我通过其他手段不能调用?守格式,吗?当然不是了.
super([arguments]);
// 调用 父对象/父类 的构造函数
super.functionOnParent([arguments]);
// 调用 父对象/父类 上的方法
他怎么说是调用父对象上的构造函数,具体的一个调用过程已经在我的上面图画中,写好了.同样super有两种调用父类上的方法.
我们先把类分为两个部分,constructor和其他部分.那么当你新建一个实例的时候,程序从子类进,先进子类的constructor,不信你把constructor放在下面,一样从这里进去.constructor.然后super一般都是在constructor中的,因为spuer要在this之前,而constructor一般都是初始化类的属性的.在constructor里调用spuer第一种方法,他会去父类的constructor中,将父类中的constructor过一遍.再次返回子类的super.这时候,子类的constructor继续走.这样就是一个简单的new一个实例.
4.static
static methodName() { ... }
类(class)通过 static 关键字定义静态方法。不能在类的实例上调用静态方法,而应该通过类本身调用。这些通常是实用程序方法,例如创建或克隆对象的功能。
这东西你就别想new,创建一个实例了,通过new一个实例去调用这个方法是不可行的.
你还可以通过super去调用父类中的static方法.
class Rectangle {
constructor() {}
static logNbSides() {
return 'I have 4 sides';
}
}
class Square extends Rectangle {
constructor() {}
static logDescription() {
return super.logNbSides() + ' which are all equal';
}
}
Square.logDescription(); // 'I have 4 sides which are all equal'
5.class
6.extends
class ChildClass extends ParentClass { ... }
记住这个语法,他就是继承的.你可以使用父亲的方法和属性.但是,如果子类的方法或者属性和父类有重叠,则替换父类.或者用父类的方法调用子类的属性.super其实就是让你使用父类constructor中的方法.
7. delete
delete是删除类中的方法或者属性的.
var Employee = {
age: 28,
name: 'abc',
designation: 'developer'
}
console.log(delete Employee.name); // returns true
console.log(delete Employee.age); // returns true
// 当试着删除一个不存在的属性时
// 同样会返回true
console.log(delete Employee.salary); // returns true
但是当你试图删除spuer的时候是不行的.
class Base {
constructor() {}
foo() {}
}
class Derived extends Base {
constructor() {}
delete() {
delete super.foo;
}
}
new Derived().delete();
// ReferenceError: invalid delete involving 'super'.
8.类元素
静态公有字段和实例公有字段都是可编辑的,可遍历的,可配置的。它们本身不同于私有对应值(private counterparts)的是,它们参与原型的继承。
静态私有字段可以在类声明本身内部的构造函数上被访问到。静态变量只能被静态方法访问的限制依然存在。
私有实例字段是通过# names句型(读作“哈希名称”)声明的,即为识别符加一个前缀“#”。“#”是名称的一部分,也用于访问和声明。封装是语言强制实施的。引用不在作用域内的 # names 是语法错误。
和静态公共方法一样,静态私有方法也是在类里面而非实例中调用的。和静态私有字段一样,它们也只能在类的声明中访问。
你可以使用生成器(generator)、异步和异步生成器方法。静态私有方法可以是生成器、异步或者异步生成器函数。