}
Fun2() { //多个方法之间不用逗号隔开,加了逗号反而是错的 }}class PersonCild extends Person { //extends实现继承}报错:
missing super() call in constructor ??//在构造函数中缺少super()调用这个时候就是要在constructor里边单独写一行super();调用,其他需要记忆的知识点:
类的数据类型就是函数,类本身就是函数在类的实例上面调用方法,其实就是调用原型上的方法类的原型上的constructor就是类本身尽量不要用__proto__在实例对象上给类原型添加方法,应用object.getPrototypeOfclass表达式,给类命名,可以查找当前类:如下const Myclass = class Me{ protoFun(){ return Me.name //Me }}class没有变量提升let也没有变量提升类相当于实例的原型,所有在勒种定义的方法,都会被实例继承类(动态)方法内的this,默认执行类的实例静态方法中的this指的是类,动态方法中的this默认指的是实例如果在一个方法前,加上static关键字,就表示该方法不会被实例继承,而是直接通过类来调用,这就称之为“静态方法”,就是加上static后方法只能用类的名字来调用,实例就调不找了静态方法可以与非静态方法重名。父类的静态方法,可以被子类继承。子类 的静态方法可以和父类的静态方法重名,重名后在子类的静态方法里边可以用super.方法名()调用父类的同名静态方法私有方法:只能类内部使用,
利用Symbol的唯一性const bar = Symbol('bar');export default class myClass{ [bar](bar){ return '私有方法' }}实例属性: 定义在实例对象(this)上的属性
静态属性: 定义在class本身的属性写法:class 类名{ constructor{ this.属性B = 属性值; }};类名.属性A = 属性值;这里,属性A就是静态属性,定义在类的外部class
constructornew target 返回new命令作用于的那个构造函数 var 实例 = new 函数A,则new target代表函数A类名.namegetsetstatic 静态方法super 代表父类的构造函数 返回父类实例,子类必须在constructor方法中调用super方法,因为子类实例的构建,基于对父类实例的加工obj.getPrototypeOf(zilei) === fulei;得到子类的父类类的__proto__和prototype属性
es5中,__proto__指向构造函数的prototype属性es6中:子类的__proto__属性,表示构造函数的继承,总是指向父类子类prototype属性的__proto__属性,表示方法的继承,总是指向父类的prototype属性B.prototype.__proto__ = A.prototype;B.__proto__ = A;这两条继承链,可以这样理解:作为一个对象,子类(B)的原型(__proto__属性)是父类(A);
作为一个构造函数,子类(B)的原型对象(prototype属性)是父类的原型对象(prototype属性)的实例。
实例的__proto__属性
子类原型的原型,是父类的原型:子类实例.__proto__.__proto__ = 父类实例.__proto__因此:通过子类实例的__proto__.__proto__属性,可以修改父类实例的行为。原生构造函数:
是指js语言内置的构造函数,如下:Boolean()Number()String()Array()Date()Function()RegExp()Error()Object()