js中的静态方法

JavaScript024

js中的静态方法,第1张

在react 类组件的生命周期中,有一个静态方法 getDerivedStateFromProps ,曾经让我使用起来比较困惑。

先来看看官方是怎么解释这个方法的:

在一个class中定义的字段,我们称之为实例字段。实例字段的特点是,每个实例都有独立的字段,各个实例的同名字段互不影响。

还有一种字段,是用static修饰的字段,称为静态字段:static field。

实例字段在每个实例中都有自己的一个独立“空间”,但是静态字段只有一个共享“空间”,所有实例都会共享该字段。

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

直接看下静态方法的demo:

这实际上跟直接将其作为属性赋值的作用相同:

在 User.staticMethod() 调用中的 this 的值是类构造器 User 自身(“点符号前面的对象”规则)。

通常,静态方法用于实现属于该类但不属于该类任何特定对象的函数。

百度到的很多内容都是类似这样的:

然后就很少有然后了,今天突然看到静态方法与实例方法这个词之后,于是有了这篇文章,让我们看看还有什么其他不同。

上边提到静态方法是直接通过属性添加的方法,实例方法是添加给实例化对象的方法。

不难看出,静态方法中的this指向的是构造函数本身,而实例方法中的this指向的是实例化对象。

这里要表达的是实例方法不能通过构造函数直接调用,而静态方法也不能通过实例调用。定义在构造函数内部的形式也是实例方法,表现与原型链添加的方式一致,但并不推荐这种写法。

此外如果是通过原型链进行的继承,那么也不会继承静态方法

有说法静态方法和实例方法对内存的分配也不同,如果实例方法是通过原型链添加的话,我觉得没啥不同(手动狗头)。还望指教。