es6 的 class
其实就是之前的构造函数和原型
// 之前的构造函数加原型
// 坐标构造函数
function Point(x, y) {
this.x = x,
this.y = y
}
//构造函数的原型
Point.prototype.toString = function () {
return `{${this.x},${this.y}}`
}
//创建实例化对象
let point = new Point(1, 2)
console.log(point.toString()) //(1,2)
// 使用es6改写
class Point {
// 类 内部一般只写方法
// 默认存在一个constructor方法
constructor(x, y) {
//constructor() 这个方法相当于之前的构造函数
this.x = x,
this.y = y
}
// 除了constructor之外,创建的方法都是公共方法,相当于之前的 原型
toString() {
return `{${this.x},${this.y}}`
}
}
let point = new Point(1, 2)
console.log(point.toString()) //(1,2)
console.log(typeof point) //object
console.log(typeof constructor) //function
console.log(typeof Point) //function
console.log(point.__proto__) //{constructor: ƒ, toString: ƒ}
// 实例化对象下的__proto__ 指得就是class的prototype
console.log(point.__proto__ === Point.prototype) //true
get和set 存值和取值
class MyClass {
numbers=100 //相当于在构造函数内的写法简化了,不可用来传参。
constructor() {
// this.numbers =100
}
//创建一个公共属性 prop 属性的值 使用 get 提供 函数的返回值
// 当我对 prop属性进行修改的时候 set prop 就会触发
get prop() {
return 'getter'
}
//用了set的话,那么该属性就变成了 可检测的
set prop(value) {
console.log('getter:' + value)
}
}
let myClass = new MyClass()
myClass.prop = '修改的' //修改之后触发set prop(){}
let myClass1 = new MyClass()
console.log(myClass)
console.log(myClass1)
类里面使用到的 this 指的是 实例化对象
es6 class的继承 先 extends 类名然后 super()
//创建一个person类
class Person {
//构造函数方法
constructor(name, age) {
//构造器中的this指的是实例对象
this.name = name,
this.age = age
}
//一般方法
speak() {
//speak方法放在类的原型对象上,供实例使用
//通过Person实例调用speak时,speak中的this就是Person实例
console.log(`我叫${this.name},我的年龄是${this.age}`)
}
}
// const f1 = new Person('吴一凡', 18)
// const f2 = new Person('路哈', 20)
// console.log(f1)
// console.log(f2)
// f1.speak()
// f2.speak()
//创建一个student类,继承person类
class Student extends Person {
//继承父类的属性 super()方法且必须写在前面
//super方法是相当于执行 new People()并且将this指向student
constructor(name, age, grade) {
super(name, age)
//student独有的
this.grade = grade
}
//重写从父类继承的方法
speak() {
console.log(`我叫${this.name},我的年龄是${this.age},我的年级是${this.grade}`)
}
//自己的方法
study() {
console.log('我很努力')
}
}
const s1 = new Student('二强', 20, '大一')
console.log(s1);
s1.speak()
```