class Abc{
constructor(){//属性
this.a=100;
}
num(){//方法
alert(this.a);
}
shownum(){
alert('ok');
}
}
var a1=new Abc()
a1.num();
a1.shownum();
alert(typeof Abc);//function
构造函数+原型 的继承
function Person(name,age){
this.name=name;
this.age=age;
}
Person.prototype.showinfo=function(){
return this.name+','+this.age;
}
//属性的继承
function Student(name,age,sex){
Person.apply(this,arguments);
this.sex=sex;
}
for(var i in Person.prototype){
Student.prototype[i]=Person.prototype[i];//方法的继承
}
var s1=new Student('zhangsan',100,'男');
alert(s1.name);
alert(s1.showinfo());
ES6 class 继承
class Person{
constructor(name,age){
this.name=name;
this.age=age;
}
showinfo(){
return this.name+','+this.age;
}
}
//super这个关键字,既可以当作函数使用,也可以当作对象使用。在这两种情况下,它的用法完全不同。
//第一种情况,super作为函数调用时,代表父类的构造函数。ES6 要求,子类的构造函数必须执行一次super函数。
//只有调用super之后,才可以使用this关键字,否则会报错。这是因为子类实例的构建,基于父类实例,只有super方法才能调用父类实例。
//第二种情况,super作为对象时,在普通方法中,指向父类的原型对象;在静态方法中,指向父类。
class Student extends Person{
constructor(name,age,sex){
super(name,age);//继承属性和方法
this.sex=sex;
}
showinfo1(){
return super.showinfo()+'我是'+this.sex+'的';
}
}
var s1=new Student('zhangsan123',100,'男');
alert(s1.name);//zhangsan123
alert(s1.showinfo1());//zhangsan123,100 我是男的