javascript - JS:从构造函数运行方法并且不再使用对象
问题描述
我正在编写一个小型 JS 应用程序,并想询问一些最佳实践。所以,假设我有一个这样的类Dog
:
class Dog {
constructor(name) {
this.name = name;
}
bark() {
console.log(`Bark Bark - ${this.name}`);
}
sayName() {
console.log(`My name is ${this.name}`);
}
}
当我创建一个作为Dog
类实例的新对象时,我总是需要调用bark()
and sayName()
。这样做时,是否建议从构造函数中调用这些方法,如下所示:
constructor(name) {
this.name = name;
this.bark();
this.sayName();
}
还是在像这样初始化对象后在外面调用它们更好:
let germanShepard = new Dog("german shepard");
germanShepard.bark();
germanShepard.sayName();
注意:我永远不需要使用bark()
andsayName()
之后这样做。这只是一次的事情。
那么,大家有什么推荐的呢?一个比另一个有什么优势吗?提前致谢。
解决方案
是否建议从构造函数中调用这些方法
不,不要那样做。构造函数应该只初始化一个对象,它不应该做任何其他事情。(它可能会使用辅助方法来做到这一点)。它绝对不应该导致输出或其他副作用。仅将new
调用用于运行过程然后丢弃对象是一种反模式。
我建议改为引入静态方法:
class Dog {
…
static fastLife(name) {
const dog = new this(name);
dog.bark();
dog.sayName();
// dog dies
}
}
Dog.fastLife("german shepard");
…并且不再使用对象
走到极端,你为什么需要一个class
?当你几乎不使用它时,为什么你还需要一个对象?当您只需要一个小功能时,不要选择 OOP。
function fastLivedDog(name) {
function bark() {
console.log(`Bark Bark - ${name}`);
}
function sayName() {
console.log(`My name is ${name}`);
}
// in this example, the local functions are called only once
// and could be trivially inlined…
bark();
sayName();
}
fastLivedDog("german shepard");
推荐阅读
- html - 如何在卡片组上方放置文字?
- javascript - 如何更新 HTML 表格?
- c# - Selenium 内存不足异常
- python - 如何在 Windows 7 的虚拟环境中运行 py 文件?
- r - 在 R 中使用 JSON API 抓取和编译数据:所有可能的数据 ID 号
- matlab - MATLAB 为列向量元素创建变量名称
- entity-framework - 无法加载文件或程序集'System.Web.Extensions,版本 = 4.0.0.0
- css - 进度条中的文本需要重新定位
- reactjs - 如何为 Table 组件呈现导入的数据
- hibernate - 休眠:[实体] 未映射