为什么要使用构造函数?

问题描述 投票:0回答:2

我突然想到,老实说,我从来没有必要一直使用类或构造函数,并开始想知道是否在某些情况下我应该使用它们?例如,下面的代码基本上是相同的,除了一个使用构造函数,一个不使用构造函数。

使用构造函数:

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' }

对我来说,不使用构造函数似乎更简单,所以我会避免使用它 AMAP。你更喜欢什么以及为什么?您到底什么时候决定使用构造函数而不是“常规”函数?

javascript class constructor apply call
2个回答
3
投票

构造函数使您能够向对象本身编写方法,如果没有构造函数,则无法做到这一点。除此之外,您还可以提供自定义初始化,必须在对实例化对象调用任何其他方法之前完成该初始化。您还可以使用

extends
运算符从一个类继承到另一个类。这可以节省您一遍又一遍地重写相同内容的时间,并提供对对象更好、更轻松的控制。

请参阅以下链接了解更多信息: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes/constructor


0
投票

您的两个示例都使用构造函数。您的第一个示例使用两个对象构造函数。您的第二个示例使用两个函数,它们都包装

Object
,这是一个(标准内置对象)构造函数。您的两个示例都没有使用类构造函数。使用对象构造函数而不是
Object
有一个好处。

首先,对象属性的一般规则是将字段放入实例中,将方法放入原型中,以节省内存并启用继承。当然,您的示例不包含任何对象方法,但我猜您的问题比您的示例更广泛。

当您使用

Object
创建实例时,新实例将
Object.prototype
作为其原型。确实,您可以将方法放入
Object.prototype
中,但不鼓励这样做,因为所有对象的实例都会继承这些方法。当您使用像
Food
这样的对象构造函数时,新实例将获得
Food.prototype
作为其原型,该原型专用于
Food
实例。因此(如果
Food
有方法)您可以安全地将方法分配给
Food.prototype

另请参阅 https://medium.com/hagenhaus/diagrams-of-javascript-constructors-0e348b67dfee

© www.soinside.com 2019 - 2024. All rights reserved.