class语法

微信扫一扫,分享到朋友圈

class语法

Class语法

1:类的定义

class Point {

m; //也可以定义在顶部

constructor(x, y) {

//定义类的属性可以在  constructor 函数当中使用this
this.x = x;
this.y = y;

}

toString() {

return '(' + this.x + ', ' + this.y + ')';

}

}

注意:定义类的方法的时候,前面不需要加function关键字,方法之间也不需要加逗号分隔

2:类的数据类型是函数,类本身指向构造函数

使用的时候,也是直接对类使用new命令,类的所有方法都定义在类的prototype属性上面

3:一次性添加多个方法

class Point {

constructor(){

// ...

}

}

Object.assign(Point.prototype, {

toString(){},

toValue(){}

});

注意:类的内部定义的方法,都是不可枚举的

4:取值函数(getter)和存值函数(setter)

在“类”的内部可以使用get和set关键字,对某个属性设置存值函数和取值函数,拦截该属性的存取行为

class MyClass {

constructor() {

// ...

}

get prop() {

return 'getter';

}

set prop(value) {

console.log('setter: '+value);

}

}

let inst = new MyClass();

inst.prop = 123;

// setter: 123

inst.prop

// ‘getter’

5:类的属性名可以采用表达式

let methodName = ‘getArea’;

class Square {

constructor(length) {

// ...

}

[methodName]() {

// ...

}

}

6:类也可以采用表达式的形式定义

const MyClass = class Me {

getClassName() {

return Me.name;

}

};

注意:需要注意的是,这个类的名字是Me,但是Me只在 Class 的内部可用,指代当前类。在 Class 外部,这个类只能用MyClass引用

7:注意点

{

1:类的内部默认使用严格模式
2:类不存在变量提升
3:ES6的类只是ES5的构造函数的包装,所以函数的许多特性都会被继承,包括name属性
4:如果某个方法之前加上星号(*),就表示该方法是一个 Generator 函数
5:类的方法内部如果含有this,它默认指向类的实例

}

8:静态方法

类相当于实例的原型,所有在类中定义的方法,都会被实例继承。

如果在一个方法前,加上static关键字,就表示该方法不会被实例继承,

而是直接通过类来调用,这就称为“静态方法”。

静态方法当中的this指向类,而不是实例

class Foo {

static classMethod() {

return 'hello';

}

}

Foo.classMethod() // ‘hello’

var foo = new Foo();

foo.classMethod()

// TypeError: foo.classMethod is not a function

9:静态属性

class Foo {

}

Foo.prop = 1;

Foo.prop // 1

这个属性实例不会继承

目前,只有 这种写法可行,因为 ES6 明确规定,Class 内部只有静态方法,没有静态属性

提案:写法是在实例属性的前面,加上static关键字

10:私有方法和属性

待续…

消息称​供应商为2021年的iPhone开发采用LTPO技术的OLED显示屏

上一篇

互联网人的“地摊经济”:一场盛大而虚假的营销

下一篇

你也可能喜欢

class语法

长按储存图像,分享给朋友