class基本语法
基本概述
在es5中,如果要生成实例对象是通过构造方法和原型的组合模式形成的。
而es6提供了更接近传统语言的方法。引入了class
类的概念。由class
类的关键字声明。
class Person {
x;
y;
//构造函数
//构造函数实在类被实例化的时候默认执行
constructor(x, y) {
//初始化xy 属性值
this.x = x;
this.y = y;
}
toString() {
console.log(this.x + "/" + this.y);
}
}
let people = new Person(0, 0);
console.log(Person === Person.prototype.constructor)//true
console.log(people.constructor);//指向的也是本身
constructor
指向类本身。
class中添加类
由于类的方法都定义在prototype
对象上面,所以类的新方法可以添加在prototype
对象上面。
Object.assign
方法可以很方便地一次向类添加多个方法。
class Person{
constructor(){
}
}
Object.assign(Person.prototype, {
tosleep() {
}
});
Class直接定义的方法之间不需要逗号分隔。
class中的constructor方法
constructor
方法是类的默认方法,通过new
命令生成对象实例时,自动调用该方法。一个类必须有constructor
方法,如果没有显式定义,一个空的constructor
方法会被默认添加。
class中原型链问题
class animal {
constructor() {
}
}
let c1 = new animal();
let c2 = new animal();
c1.__proto__.sleep = function () {
console.log("睡觉"); }
console.log(c1.__proto__ === c2.__proto__);//true
修改一个子类对象,另一个子类对象同时修改。引用关系 。
class中getter和setter
{
class Person {
get name() {
return this._name;
}
set name(n) {
this._name = n;
}
}
let people = new Person();
people.name = "小花";
console.log(people.name);//小花
class中类的属性名
{
let method="work";
class Person{
constructor (){
}
[method](){
}
}
let people=new Person()
console.log(people);
}
class类中的属性或者方法名称使用字面表示。
class中的属性方法
类中的方法分为静态和非静态。
如果在一个方法前,加上static
关键字,就表示该方法不会被实例继承,而是直接通过类来调用,这就称为“静态方法”。
class Person{
static type="人";
name;
age;
sex;
constructor (n,a,s){
this.name=n;
this.age=a;
this.sex=s;
}
static huxi(){
console.log('都要呼吸');
}
sleep(){
console.log('睡觉');
}
}
let stu=new Person('小黑',10,'男');
let stu1=new Person('小滑',18,'女');
console.log(stu);
console.log(stu1);
Person.huxi();
console.log(Person.type);
}
对象点属性和方法全是非静态的。
静态的属性和方法使用类名称调用。