Использует функцию для создания объекта в javascript так же хорошо, как использование нового оператора

Я использовал следующий шаблон для создания объектов в javascript.

function FileSpec(directory, filename){
  var object = {};
  object.full_path = function(){
    return directory + '/' + filename;
  }
  return object;
}

var filespec = FileSpec('tmp', 'index.html');

Существуют ли какие-либо особые недостатки в использовании вышеуказанной реализации по сравнению с использованием прототипа и нового?

function FileSpec(directory, filename){
  this.directory = directory;
  this.filename = filename;
}

FileSpec.prototype.full_path = function(){
  return this.directory + '/' + this.filename
}

var filespec = new FileSpec('tmp', 'index.html');
0
nl ja de
спасибо за ресурсы, я попробую использовать «новый» и получить преимущества, которые он приносит
добавлено автор elliance, источник
Прототип является свойством и может быть доступен в экземплярах FileSpec, это лучший способ, если есть много экземпляров этого объекта
добавлено автор Bernhard, источник
Дайте этому прочитать: ejohn.org/blog/simple-class-instantiation
добавлено автор Mark Schultheiss, источник
добавлено автор Avinash T., источник

1 ответы

  1. You can't use the instanceof operator, or the Object.isPrototypeOf() method effectively with 1, but you can with #2.

    filespace instanceof FileSpec;//false with 1, true with 2
    Filespec.isPrototypeOf(filespace); //false with 1, true with 2
    
  2. When using prototype inheritance, prototype members (methods etc) are defined only once on the prototype. In #1, you're defining a new group of members on each instance, which is more memory intensive.

    var ar = [];
    
    for (var i=0;i<10000000;i++) {
        ar.push(FileSpec('tmp', 'index.html'));
    }
    
    // check memory usage, cry.
    

    Compared to:

    var ar = [];
    
    for (var i=0;i<10000000;i++) {
        ar.push(new FileSpec('tmp', 'index.html'));
    }
    
    // check memory usage.
    
2
добавлено
также свойство prototype установлено в Filespec для # 2, и значения для этого также различны.
добавлено автор Christoph, источник
JavaScript Jobs — чат
JavaScript Jobs — чат
8 336 участник(ов)

JavaScript Jobs — чат для поиска работы и людей Правила оформления: https://teletype.in/@telegram-ru/r1WQe5F1m См. также: @mobile_jobs, @devops_jobs, @nodejs_jobs, @react_js, @angular_ru, @js_ru

JavaScript.ru
JavaScript.ru
7 932 участник(ов)

Сообщество сайта JavaScript.ru в Slack.

pro.js
pro.js
4 675 участник(ов)

Про JavaScript и NodeJS Invite: https://t.me/joinchat/Be4rsT5Rsgq30DHutjxXgA Правила: http://telegra.ph/ru-chat-rules-06-19 Вакансии только с ЗП, не чаще раза в неделю.

JavaScript — русскоговорящее сообщество
JavaScript — русскоговорящее сообщество
3 269 участник(ов)

Рекомендуем сразу отключить уведомления Правила: https://rudevs.network/ByaMH6un7 См. также: @js_noobs_ru, @nodejs_ru, @typescript_ru, @react_js, @electron_ru Вакансии и поиск работы: @javascript_jobs

JavaScript Noobs — сообщество новичков
JavaScript Noobs — сообщество новичков
2 484 участник(ов)

Чат для новичков

javascript_ru
javascript_ru
915 участник(ов)

Сообщество любителей самого популярного языка программирования в мире. Чат основан в 2009 году. Логи: https://goo.gl/9EOeM7 Поддержка бота: @chat_linker (ссылка на репу внутри) Вам будут интересны @frontend_ru и @css_ru

jsChat
jsChat
603 участник(ов)

Чат посвященный программированию на языке javaScript Перед отправкой ссылки на Ваш контент посоветуйтесь с админом Все ссылки удаляются ботом автоматически

JavaScript for Zombies Chat
JavaScript for Zombies Chat
492 участник(ов)

Чат про JavaScript для настоящих zombie! Вход строго по приглашениям! Ссылка для строгих приглашений: https://t.me/joinchat/AAMBHz3Uyr0tuZ7VaB029g

All That JS
All That JS
417 участник(ов)

JS на русском