{
class Ploygon {
constructor(width, height)
{
this.width = width;
this.height = height;
}
get area() {
return this.countArea();
}
countArea() {
return this.width * this.height;
}
};
let result = new Ploygon(10, 20);
console.log(result.area);
}
说明
- constructor()方法:该方法是类的默认方法,通过 new 创建对象实例时,自动调用该方法;该方法默认返回实例对象(即this)
- get关键字的用法:有时候访问属性时能返回一个动态计算后的值;不希望通过使用明确的方法调用来显示内部变量的状态
{
class Point {
constructor(x, y)
{
this.x = x;
this.y = y;
}
static distance(a, b) {
const dx = a.x - b.x;
const dy = a.y - b.y;
return Math.sqrt(dx*dx + dy*dy);
}
};
const pOne = new Point(5, 5);
const pTwo = new Point(10, 10);
console.log(Point.distance(pOne, pTwo));
}
说明
- static关键字:用来定义类的静态方法;该方法不会被实例所继承,只能通过类名来调用;静态方法经常用来作为 工具函数 使用;
- 子类可以调用父类的静态方法
{
class People {
constructor(name)
{
this.name = name;
}
sayName() {
console.log(this.name);
}
};
class Student extends People {
constructor(name, grade)
{
super(name);
this.grade = grade;
}
sayGrade() {
console.log(this.grade);
}
};
const stu = new Student('adiu', '幼儿园');
stu.sayGrade();
stu.sayName();
}
说明
- 子类可以继承父类的所有属性和方法
- supper()方法调用父类的构造函数(即父类的** this **);子类必须在constructor方法中调用 supper() ,否则新建实例时会报错 this is not defined ,这是因为子类没有自己的 this对象,而是继承父类的this对象,然后对其进行加工;如果不调用super方法,子类就得不到this对象
{
class People {
constructor(name)
{
this.name = name;
}
get name() {
return this._name.toString().toUpperCase();
}
set name(name) {
this._name = name;
}
sayName() {
console.log(this.name);
}
};
const result = new People('adiu');
console.log(result.name);
console.log(result._name);
result.sayName();
}
说明
- 在class内部使用 get 和 set 关键字,对某个属性设置取值和赋值函数(定义读写器),拦截该属性的存取行为