Эффективность заводских функций - PullRequest
3 голосов
/ 25 мая 2020

Я видел примеры таких фабричных функций,

const dog = () => {
 const sound = 'woof'
 return {
  makeSound: () => console.log( sound )
 }
}

const poodle = dog()
poodle.makeSound() // woof

Но в этом случае каждая созданная собака будет иметь дополнительную функцию makeSound, созданную в памяти. Разве не было бы лучше, если бы функции были внешними по отношению к созданному объекту и просто передавали бы объект в звуковую функцию вот так?

const dog = () => {
 return {
  sound: 'woof'
 }
}

const makeSound = obj => console.log( obj.sound )

const poodle = dog()
makeSound( poodle ) // woof
* 1006 с помощью фабричной функции, а не иметь ее снаружи и передавать в нее объект, с которым вы хотите запустить функцию?

1 Ответ

1 голос
/ 25 мая 2020

Преимущество заключается в ясности для разработчиков , что makeSound() - это что-то конкретное от c до Dog s.

Представьте, что вы не знаете определение функции .

Код:

makeSound(arg);

действителен с любым аргументом в javascript. Или нет, как это бывает (тогда это будет считаться undefined).

Ничто не мешает разработчику позвонить

const myUnrelatedObject = { foo: "bar" };
makeSound(myUnrelatedObject); // compiles and returns no error (will just print "undefined")

, тогда как «объектно-ориентированный» способ выдаст ошибка времени выполнения

myUnrelatedObject.makeSound(); // TypeError: makeSound is not a function

Хорошие практики / шаблоны кода созданы для людей-разработчиков!


Но вы правы, это накладные расходы. И то же самое для многих языков, когда дело доходит до объектно-ориентированных шаблонов.

Если это действительно снижает производительность вашего приложения, вы можете и должны рассмотреть возможность обмена -выкл между памятью и удобочитаемостью (и, следовательно, стоимость обслуживания программного обеспечения).

Но в качестве «значения по умолчанию» я настоятельно рекомендую (для вас, ваших коллег и вашей компании) выбрать путь удобочитаемость и ремонтопригодность в первую очередь.

Кроме того, имейте в виду, что вам действительно следует измерять влияние на производительность в реальных ситуациях. JavaScript компиляторы / движок в настоящее время могут очень хорошо оптимизировать код, особенно если он написан обычным, предсказуемым образом.

...