为什么要使用构造函数?

3

我曾经想过这样一个问题,我一直没有必要使用类或构造函数,我开始思考是否有情况下我应该使用它们?例如,下面的代码基本上是相同的,除了一个使用了构造函数而另一个没有。

使用构造函数:

function Food(foodName, foodPrice) {
   Currencies.call(this, foodPrice);
   this.category = 'food';
   this.name = foodName;
}

function Currencies(usd) {
   this.usd = usd;
   this.won = +usd * 1000;
}

const pizza = new Food('pizza', 30); // { usd: 30, won: 30000, category: 'food', name: 'pizza' }
const burger = new Food('burger', 10); // { usd: 30, won: 30000, category: 'food', name: 'pizza' }

不使用构造函数

function food(foodName, foodPrice) {
   return { name: foodName, category: 'food', ...(currencies(foodPrice)) }
}

function currencies(usd) {
   return { usd, won: usd * 1000 }
}

const pizza = food('pizza', 30); // { usd: 30, won: 30000, category: 'food', name: 'pizza' }
const burger = food('burger', 10); // { usd: 30, won: 30000, category: 'food', name: 'pizza' }

对我来说,不使用构造函数似乎更简单,所以我会尽量避免使用。您喜欢哪种方式,原因是什么?什么情况下您才会选择使用构造函数而不是“常规”函数?

1
对于你自己编写和实现的代码,你可以使用构造函数实现的所有有用功能也可以在没有构造函数的情况下实现。我遵循相同的方法,我一直觉得普通函数同样有效,并且从未想过使用类或构造函数。 - CertainPerformance
装饰器和依赖注入可能是使用类而不是函数的主要区别(除了已经提到的之外),但目前这在很大程度上取决于您使用的框架(如果有)。很想听听其他人的看法! - Ameer
哇,我不知道你可以使用“function”关键字创建类。 - Layhout
1个回答

3
构造函数使您能够编写对象本身的方法,而没有构造函数则无法做到这一点。除此之外,您还可以提供自定义初始化,在实例化对象上调用任何其他方法之前必须完成该初始化。您还可以使用extends运算符从一个类继承到另一个类。这样可以节省重复编写相同代码的时间,并提供更好、更容易控制对象的方式。
请参考以下链接获取更多信息: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes/constructor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接