1
0
mirror of https://github.com/ruanyf/es6tutorial.git synced 2025-05-25 11:12:21 +00:00

edit class/no static property

This commit is contained in:
ruanyf 2015-09-17 11:49:48 +08:00
parent 24548c3f3f
commit 8ac0c18bd7

View File

@ -416,7 +416,7 @@ class ColorPoint extends Point {
} }
``` ```
上面代码中子类的constructor方法没有调用super之前就使用this关键字结果报错而放在super方法之后就是正确的。 上面代码中,子类的`constructor`方法没有调用`super`之前,就使用`this`关键字,结果报错,而放在`super`方法之后就是正确的。
下面是生成子类实例的代码。 下面是生成子类实例的代码。
@ -814,7 +814,7 @@ for (let x of new Foo('hello', 'world')) {
## Class的静态方法 ## Class的静态方法
类相当于实例的原型所有在类中定义的方法都会被实例继承。如果在一个方法前加上static关键字就表示该方法不会被实例继承而是直接通过类来调用这就称为“静态方法”。 类相当于实例的原型,所有在类中定义的方法,都会被实例继承。如果在一个方法前,加上`static`关键字,就表示该方法不会被实例继承,而是直接通过类来调用,这就称为“静态方法”。
```javascript ```javascript
class Foo { class Foo {
@ -830,7 +830,23 @@ foo.classMethod()
// TypeError: undefined is not a function // TypeError: undefined is not a function
``` ```
上面代码中Foo类的classMethod方法前有static关键字表明该方法是一个静态方法可以直接在Foo类上调用`Foo.classMethod()`而不是在Foo类的实例上调用。如果在实例上调用静态方法会抛出一个错误表示不存在该方法。 上面代码中,`Foo`类的`classMethod`方法前有`static`关键字,表明该方法是一个静态方法,可以直接在`Foo`类上调用(`Foo.classMethod()`),而不是在`Foo`类的实例上调用。如果在实例上调用静态方法,会抛出一个错误,表示不存在该方法。
需要注意的是,类只有静态方法,没有静态属性,像`Class.propname`这样的用法不存在。
```javascript
// 以下两种写法都无效,
// 但不会报错
class Foo {
// 写法一
prop: 2
// 写法二
static prop: 2
}
Foo.prop // undefined
```
父类的静态方法,可以被子类继承。 父类的静态方法,可以被子类继承。
@ -849,7 +865,7 @@ Bar.classMethod(); // 'hello'
上面代码中父类Foo有一个静态方法子类Bar可以调用这个方法。 上面代码中父类Foo有一个静态方法子类Bar可以调用这个方法。
静态方法也是可以从super对象上调用的。 静态方法也是可以从`super`对象上调用的。
```javascript ```javascript
class Foo { class Foo {