ES6初学2
1.Class
类
class Num{
constructor(...args){
for( let i in args ){
this[i]=args[i];
}
}
add(){
let total=0;
for( let i in this ){
if( typeof this[i] ==="number" ){ total+=this[i] }
}
return total;
}
}
let a=new Num(1,2,3,4,5); //这里new了一个Num实例赋值给a
a.add() //15 add方法在a.__proto__上面
特别注意:class xxx{ } ,xxx后面不能加()括号 可以及时分号;
方法与方法之间,不能加逗号,
- 当new一个实例时,就调用了
constructor
方法 - 类和模块默认使用严格模式
- 类没有变量提升
- ### 类的静态方法不能被实例调用,只能被类调用
class Num{
constructor(...args){
this.args=args;
for( let i in args ){
this[i]=args[i];
}
}
static add(obj){
let total=0;
for( let i in obj ){
if( typeof obj[i] ==="number" ){ total+=obj[i] }
}
return total;
}
}
var a=new Num(5,8,6,1);
a.add //undefined
Num.add(a); // 20
特别注意:静态方法的this指向的是类,而不是实例;静态方法与非静态方法可以重名
new.target
用于构造函数内判断实例是不是new出来的,返回值是当前的class function Person(name="",sex="保密",age=20){
if( new.target ){
this.name=name;
this.sex=sex;
this.age=age;
}else{
return "不允许直接调用";
}
}
var p=new Person("jpc","男",19); //{name: "jpc", sex: "男", age: 19}
Person("jpc","男",19); //不允许直接调用
- 类的继承
使用extens的方法进行继承
class Father{
}
class Children extends Father{
}
子类中的构造函数constructor必须调用super方法,否则报错,如果子类里没有构造函数默认会添加调用
class A {
}
class B extends A {
}
B.__proto__ === A // true
B.prototype.__proto__ === A.prototype // true
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。