1、es5中的类与继承
1、类(函数形式)
function Person(name,age){
//构造函数里面的实例方法方法和属性
this.name = name;
this.age = age;
this.run = function(){
console.log(`${this.name}--${this.age}`);
}
}
2、原型链的方法与静态方法
原型链上的公共方法
Person.prototypy.sex = "男";
Person.prototype.work = function(){
console.log(`${this.name}--${this.age}--${this.sex}`);
}
静态方法(类名+方法名)
Person.setName = ()=>{
console.log('静态方法');
}
实例方法和静态方法的使用
//实例方法必须在实例化之后再使用,例如
var p = new Person('zhangsan','20');
p.run()
//静态方法直接使用,类名+方法名
Person.setName();
3、继承
原型链加对象冒充继承
function Person(name,age){
//构造函数里面的实例方法方法和属性
this.name = name;
this.age = age;
this.run = function(){
console.log(`${this.name}--${this.age}`);
}
}
//若用web继承Person
function Web(name,age){
Person.call(this,name,age)/*对象冒充实现继承 */
//对象冒充不能继承原型链上的方法
/*
......
*/
}
Web.prototype = new Person(); //原型链继承
//原型链继承可以继承构造函数以及原型链上的属性和方法,但是
//实例化子类的时候无法给父类传参
2、es6中的类与继承
1、类(class关键词)
class Person2 {
constructor(name,age){
this._name = name;
this._age = age;
}
getName(){
console.log(`${this.name}--${this.age}`);
}
setName(name){
this._name = name
}
}
2、继承(extend关键词)
用web2继承Person2
class Web2 extends Person2{
constructor(name,age,sex){
super(name,age);//实例化子类的时候吧子类的数据传给父类
this.sex = sex;
}
print(){
console.log(this.sex);
}
}
3、静态方法与实例方法(static关键词)
class Person3{
constructor(name){
this._name = name;/*属性 */
}
run(){//实例方法
console.log(this._name);
}
static work(){/*用work静态方法 */
console.log('静态方法')
}
}
//还可以添加静态方法的属性
Person3.instance = 'JOJO and DIO'
//调用
p.run();
Person3.work()