JavaScript ES6之前的还没有Class类的概念,生成实例对象的传统方法是通过构造函数。 例如: 1 function Mold(a,b){ 2 this.a=a; 3 this.b=b; 4 } 5 Mold.prototype.count=function(){ 6 return this.a+this.b; 7 }; 8 let sum=new Mold(1,2); 9 console.log(sum.count()) //3 这中写法跟传统的面向对象语言差异较大,写起来也比较繁杂。
当然ES6的大部分功能再ES5都能实现,ES6的 1 class Mold{ 2 constructor(a,b){ 3 this.a=a; 4 this.b=b; 5 } 6 count(){ 7 return this.a+this.b; 8 } 9 } 10 let sum=new Mold(1,2); 11 console.log(sum.count()) //3
例如: 1 class Mold{ 2 constructor(){ 3 console.log("aaa") 4 } 5 } 6 let m=new Mold();// aaa 7 console.log(m.constructor===Mold);//true 上面代码Mold类的constructor,实例化对象时执行默认
例如: 1 let arr=new Array(); 2 console.log(arr.constructor===Array);//true 3 let str=new String(); 4 console.log(str.constructor===String);//true 5 let obj=new Object(); 6 console.log(obj.constructor===Object);//true 2. 类的继承 extends
例如: 1 //class 类名 extends 被继承的类{} 2 Class Father{ 3 constructor(){ 4 } 5 sum(){ 6 console.log("abc"); 7 } 8 static fn(){ 9 console.log("hello") 10 } 11 } 12 Class Son extends Father{ 13 14 } 15 let s=new Son(); 16 s.sum()//abc,继承了父类的sum()方法 17 Son.fn()//hello 继承了父类的静态方法fn()
3. super
例如: 1 //super.父类函数(); 2 class Father{ 3 constructor(){ 4 console.log("bbb"); 5 } 6 } 7 class Son extends Father{ 8 constructor(x){ 9 this.x=x;//ReferenceError,报错 10 super(); 11 this.x=x;//正确 12 } 13 } 14 let sum=new Son();//bbb 4. 类的static静态
例如: 1 class Mold{ 2 static x=0; 3 y=1; 4 static fn1(){ 5 console.log("aaa") 6 } 7 fn2(){ 8 console.log("bbb"); 9 } 10 } 11 let m=new Mold(); 12 console.log(m.x,m.y);//undefined , 1 13 m.fn1(); // TypeError 14 m.fn2(); // bbb 15 //需要通过类来调用 16 Mold.fn1(); //aaa 17 console.log(Mold.x);//0
|
|