ES6 class

作者: Cherry丶小丸子 | 来源:发表于2020-03-24 17:32 被阅读0次

class chf{ // 创建类
    constructor(name) { // 一个类必须有constructor方法 这就是构造方法
        this.name = name
    }
    toString() {
        return this.name
    }
            
    get prop() { // 取值函数(getter)
        return 'getter';
    }
            
    set prop(value) { // 存值函数(setter)
        console.log('setter: ' + value);
    }
};
typeof Point // "function"
Point === Point.prototype.constructor // true

var chff = new chf("陈汉芙"); // 使用的时候,也是直接对类使用new命令,跟构造函数的用法完全一致
        
var name = chff.toString()
console.log(name) // 陈汉芙
        
chff.prop = 123; // setter: 123 ‘存值’
chff.prop // getter ’取值‘

class表达式

// 函数表达式形式写法
const MyClass = class Me { // 这个类的名字是Me,但是Me只在 Class 的内部可用,指代当前类。在 Class 外部,这个类只能用MyClass引用
    getClassName() {
        return Me.name;
    }
};
// 如果类的内部没用到的话,可以省略Me,也就是可以写成下面的形式
let MyClass = class{}

// 采用 Class 表达式,可以写出立即执行的 Class。
let person = new class{ // 立即执行类
    constructor(x){
    this.x = x;
}
getName(){
    console.log(this.x)
}
}("陈汉芙");
person.getName();

注意点

(1)严格模式
        默认严格模式
(2)不存在提升
        new Foo(); // ReferenceError
        class Foo {}
(3)name 属性
        class Point {}
        Point.name // "Point"
(4)Generator 方法
        如果某个方法之前加上星号(*),就表示该方法是一个 Generator 函数
(5)this 的指向
        类的方法内部如果含有this,它默认指向类的实例。但是,必须非常小心,一旦单独使用该方法,很可能报错

静态方法

类相当于实例的原型,所有在类中定义的方法,都会被实例继承。
如果在一个方法前,加上static关键字,就表示该方法不会被实例继承,而是直接通过类来调用,这就称为“静态方法”。
class Foo {
  static classMethod() {
    return 'hello';
  }
}

Foo.classMethod() // 'hello'

var foo = new Foo();
foo.classMethod()
// TypeError: foo.classMethod is not a function

上面代码中,Foo类的classMethod方法前有static关键字,表明该方法是一个静态方法,
可以直接在Foo类上调用(Foo.classMethod()),而不是在Foo类的实例上调用。
如果在实例上调用静态方法,会抛出一个错误,表示不存在该方法。

注意,如果静态方法包含this关键字,这个this指的是类,而不是实例。

实例属性的新写法

class IncreasingCounter {
    constructor() {
        this.chenhanfu= 0;
    }
}
改写成 实例属性定义在类的最顶层,其他都不变
class IncreasingCounter {
    chenhanfu= 0;
}

静态属性

静态属性指的是 Class 本身的属性,即Class.propName,而不是定义在实例对象(this)上的属性
// 老写法
class Foo {}
Foo.prop = 1; // 类定义了一个静态属性prop,其值为1
Foo.prop // 1

// 新写法
class MyClass {
    static myStaticProp = 42;
}

相关文章

网友评论

      本文标题:ES6 class

      本文链接:https://www.haomeiwen.com/subject/dldrictx.html