Javascript class 静态方法与函数
Javascript class static method vs function
以下2个代码块:
const Game = {
start: () => { ...run some logic; return true; },
stop: () => { ...run some logic; return false; }
}
class Game {
static start() { ...run some logic; return true; }
static stop() { ...run some logic; return false; }
}
两者都适用于 运行 Game.start()
或 Game.stop()
。
其中任何一个都有 pros/cons 吗?
如果您只想要此对象的一个实例,那么实际上没有任何意义的区别。
Game
对象声明和 Game
class 声明都只是单例(具有某些属性的对象的一个预声明实例)。
使用 class
更有意义的地方是,如果您想构造多个这些对象,并且您希望每个实例都有自己单独的实例数据,或者您想继承另一个定义。这确实是 class
中的差异和功能明显且有用的地方。所有这些也可以在没有 class
的情况下进行模拟(就像我们在将 class
关键字添加到语言之前所做的那样),但是使用 class 使得继承和定义对象将是动态的构造更简单,更具声明性。
因此,正如您在问题中显示的那样,只有一个预定义的单例,没有任何有意义的优势可以优先于另一个。
以下2个代码块:
const Game = {
start: () => { ...run some logic; return true; },
stop: () => { ...run some logic; return false; }
}
class Game {
static start() { ...run some logic; return true; }
static stop() { ...run some logic; return false; }
}
两者都适用于 运行 Game.start()
或 Game.stop()
。
其中任何一个都有 pros/cons 吗?
如果您只想要此对象的一个实例,那么实际上没有任何意义的区别。
Game
对象声明和 Game
class 声明都只是单例(具有某些属性的对象的一个预声明实例)。
使用 class
更有意义的地方是,如果您想构造多个这些对象,并且您希望每个实例都有自己单独的实例数据,或者您想继承另一个定义。这确实是 class
中的差异和功能明显且有用的地方。所有这些也可以在没有 class
的情况下进行模拟(就像我们在将 class
关键字添加到语言之前所做的那样),但是使用 class 使得继承和定义对象将是动态的构造更简单,更具声明性。
因此,正如您在问题中显示的那样,只有一个预定义的单例,没有任何有意义的优势可以优先于另一个。