创建一个类
class Person {// 静态属性static staticName = "这是一个静态属性";// 实例属性,只能通过实例访问age = '18';// 接受实例的参数,this指向当前类的实例constructor(name) {this.name = name;}// 方法在该类的原型上面,所有由该类所产生的实例都可以访问 通过原型链查找sayName () {console.log('实例方法1:', this.name);}// 相当于以属性的方式来定义方法,只能通过实例访问sayName2 = () => {console.log('实例方法2:', this.name);}}const a = new Person('张三');console.log(a.staticName); // undefinedconsole.log(Person.staticName); // 这是一个静态属性console.log(a.name); // 张三a.sayName(); // 实例方法1: 张三Person.prototype.sayName() // 实例方法1: undefineda.sayName2(); // 实例方法2: 张三Person.sayName2() // Person.sayName2 is not a functionconst b = new Person('李四');b.sayName() // 实例方法1: 李四
this
- 明白这个
this的明确含义 - 哪个实例调用。this就指向它
// 方法在该类的原型上面,所有由该类所产生的实例都可以访问 通过原型链查找 sayName () { console.log(‘实例方法1:’, this.name); } // 相当于以属性的方式来定义方法,只能通过实例访问 sayName2 = () => { console.log(‘实例方法2:’, this.name); } }
- 明白这个
// 继承Person类 class Student extends Person { // 子类自己的属性,会替代父类的同名属性 name = ‘zs’ constructor(name) { // super()调用父类的构造函数 此时的this指向子类 super(name); } } const student = new Student(‘王五’); console.log(student.name); // zs student.sayName(); // 实例方法1: zs student.sayName2(); // 实例方法2: zs ```
总结
- 类中的构造器不是必须要写的,要对实例进行一些初始化的操作,如添加指定属性时才写。
- 继承的时候,如果不写constructor构造函数,则会在内部自动调用,但是如果写了,则必须调用super方 法, 否则会报错。且父类中constructor的形参,也要写上
- 类中所定义的方法,都放在了类的原型对象上,供实例去使用。
