静态属性和实例属性的应用场景?

js的类包含

  1. 静态属性和实例属性
  2. 静态方法和实例方法

请问什么场景应该把这个属性定义为静态的,什么场景应该为实例的?
请问什么场景应该把这个方法定义为静态的,什么场景应该为实例的?我能想到的是类似于Integer.parse()之类的静态方法,我恍惚能理解静态方法的使用场景,但是,还是没有那种概括性的思路。

感谢大佬~~

阅读 2.2k
3 个回答

首先,js的类就是原型链的语法糖,就是为了实现继承用的。

静态的东西就是只有类需要的,实例不需要的,也就是不需要继承的。

不继承的东西,在Java里面需要一个类来“承载”它,比如工具类,里面都是静态方法。比如自己写的常量池,里面都是静态属性。

js并不完全是Java的那套面向对象的思路。js的那些不继承的方法和属性,不需要类来包装。这就是为什么很难想出它的使用场景,因为就没什么用。

不需要继承的方法和属性,声明之后导出就好了。

如果放在类里面,写成静态的,再通过类去访问,只是提升了语义化而已,有点namespace的感觉,很大型的项目可能需要,正常情况没有使用场景。

静态属性在 new 构建之前就可以使用,我想到的场景就是可以作为全局属性使用,或者说是配置文件

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Refer...

class Icon {
    static urlPrefix = 'xxx' // 静态属性
    // 内部可以通过 this.constructor.urlPrefix 获取静态属性
}

Icon.urlPrefix = 'xx' // 可以在 new 之前配置
const A = new Icon('a')
const B = new Icon('b')

我在这个项目中就用到了静态属性 https://xy-ui.codelabo.cn/components/icon#%E9%9D%99%E6%80%81%...

image.png

每个图标都是一个实例化的对象,所以在 new 之前设置静态资源地址就非常合适

用无状态和有状态能区分。

  • 静态属性和方法都是无状态的。
  • 实例属性和方法都是跟实例状态相关的,是有状态的。

有时候静态对象看起来是有状态的,如配置相关,但对整个服务的生命周期来看,静态对象的状态是固定的,这也属于无状态。

推荐问题
logo
Microsoft
子站问答
访问
宣传栏