«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Причины и преимущества метода прототипа определяются вне конструктора

Причины и преимущества метода прототипа определяются вне конструктора

Опубликовано в 2025-04-19
Просматривать:491

Why Should Prototype Methods Be Defined Outside the Constructor Function?

назначение методов прототипа в функции конструктора: потенциальные ловушки

стилистически, некоторые предпочитают следующую структуру для определения методов прототипа:

var Filter = function( category, value ){
  this.category = category;
  this.value = value;

  // product is a JSON object
  Filter.prototype.checkProduct = function( product ){
    // run some checks
    return is_match;
  }
};

. Однако этот подход имеет несколько недостатков по сравнению с альтернативной структурой:

var Filter = function( category, value ){
  this.category = category;
  this.value = value;
};// var Filter = function(){...}

Filter.prototype.checkProduct = function( product ){
  // run some checks
  return is_match;
}

функциональные недостатки:

  1. избыточное и неэффективное назначение: ] метод прототипа назначается несколько раз, что является не подходящим и может иметь значение. Переменные конструктора из метода прототипа могут привести к неожиданным результатам. Например:
  2. var counter = function (initiorValue) { var value = initialValue; // продукт - это объект JSON Counter.prototype.get = function () { возвращаемое значение; } }; var c1 = новый счетчик (0); var c2 = новый счетчик (10); console.log (c1.get ()); // выходы 10, должны вывозить 0 ]
  3. в этом сценарии, get () Возвращает значение локальной переменной C2, а не C1, потому что замыкание метода ссылается на самое недавно определенное значение на прототипе.
var Counter = function(initialValue){
  var value = initialValue;

  // product is a JSON object
  Counter.prototype.get = function() {
      return value  ;
  }
};

var c1 = new Counter(0);
var c2 = new Counter(10);
console.log(c1.get());    // outputs 10, should output 0
Другие соображения:

  • первая структура запрещает доступ к прототипу вне конструктора, потенциально ограничивающая гибкость.
  • Метод. case.
  • Заключение:

. В то время как первая структура может быть стилистически приятной, она может ввести функциональные недостатки и проблемы с объемом. Обычно рекомендуется назначить методы прототипа вне функции конструктора (как во второй структуре), чтобы избежать потенциальных проблем. ]

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3