es5造类
function Person(name,age) {
this.name = name;
this.age = age;
}
Person.prototype.sayName = function() {
return this.name;
}
let p1 = new Person('小马哥',28);
console.log(p1.sayName()); //小马哥
console.log(p1); //Person {name: "小马哥", age: 28}
es6
class Person {
// 实例化的时候会立即被调用
constructor(name, age) {
this.name = name;
this.age = age;
}
sayName(){
return this.name
}
// console.log(p1.sayName());
}
let p1 = new Person('小马哥', 28);
console.log(p1.sayName()); //小马哥
console.log(p1); //Person {name: "小马哥", age: 28}
通过Object.assign()方法一次性向类中添加多个方法
class Person {
// 实例化的时候会立即被调用
constructor(name, age) {
this.name = name;
this.age = age;
}
sayName() {
return this.name
}
}
Object.assign(Person.prototype, {
sayName() {
return this.name
},
sayAge() {
return this.age
}
})
let p1 = new Person('小马哥', 28);
console.log(p1.sayName()); //小马哥
console.log(p1.sayAge()); //28
console.log(p1); //Person {name: "小马哥", age: 28}
使用关键字 extends 实现继承
//父类
class Animal{
constructor(name,age) {
this.name = name;
this.age = age;
}
sayName(){
return this.name;
}
sayAge(){
return this.age;
}
}
//子类
class Dog extends Animal{
constructor(name,age,color) {
//super 超类,自动调用父类中的constructor()
super(name,age);
this.color = color;
}
// 子类自己的方法
sayColor(){
return `${this.name}是${this.age}岁了,它的颜色是${this.color}`
}
// 重写父类的方法
sayName(){
return this.name + super.sayAge() + this.color;
}
}
let d1 = new Dog('小黄',28,'red');
console.log(d1.sayColor());
console.log(d1.sayName());
//调用父类中的方法
console.log(d1.sayAge());