class Person{
// 构造
constructor(x,y){
this.x = x;
this.y = y;
}
toString(){
return (this.x + "的年龄是" +this.y+"岁");
}
}
export {Person};
//index.js
import {Person} from ‘./Person‘;
let person = new Person(‘张三‘,12);
console.log(person.toString());</span>
1、class初始化定义:
Person 是一个类 ,定义了属性(x,y)与方法 toString()
console.log(typeof Person);//function
console.log(Person === Person.prototype.constructor);//true
so: 类的数据类型就是函数,类本身就指向构造函数, 可以理解为:类就是构造函数 , 因为es5的中 【构造函数 === 构造函数.prototype.constructor】
2、class类的修改与增加属性方法:
构造函数的prototype属性,在ES6的“类”上面继续存在。事实上,类的所有方法都定义在类的prototype属性上面,通过以下方式可是覆盖类中的方法,当然定义类的时候也可以通过这个方式添加方法。
Object.assign(Person.prototype,{ getWidth(){ console.log(‘12‘); }, getHeight(){ console.log(‘24‘); } }); Person.prototype.sex = ‘man‘ ; console.log(p.sex); // man Person.prototype.sex = ‘woman‘ ; console.log(p.sex); //woman
//class拥有保护机制,可以增加,或覆盖原来有属性,但是如下就不行
Person.prototype == {}
console.log(p.sex); //‘woman‘;
//sex属性还在,prototype从新赋空值这样是不生效的
PS建议:class类已经定义完毕不可修改,不可直接修改Person.prototype,个别场景需要,应新建一个继承class上,然后再修改,拓展,新class继承老的class
原文:https://www.cnblogs.com/liujinyu/p/9075949.html