Случай, когда метод записывается в конструкторе, называется методом в функции, а случай, когда метод записывается на атрибуте прототипа, называется методом на прототипе.
• Методы в функции: Используя методы в функции, мы можем получить доступ к частным переменным внутри функции. Если объект, который мы используем новый конструктор, чтобы потребовать от нас управления частными переменными внутри конструктора, мы должны рассмотреть возможность использования методов в функции в настоящее время.
• Методы на прототипе: когда нам нужно создать большое количество объектов через функцию, и эти объекты имеют много методов; В настоящее время мы должны рассмотреть возможность добавления этих методов к прототипу функции. В этом случае наш код будет потреблять относительно небольшую память.
• В реальных приложениях эти два метода часто используются в комбинации; Поэтому нам нужно сначала понять, что нам нужно, а затем выбрать, как его использовать.
// АФКУМЕНТ КОНСТРУКЦИЯ A (имя) {this.name = имя || 'a'; this.sayhello = function () {console.log ('Привет, мое имя:' + this.name); }} // Конструктор Bfunction b (name) {this.name = name || 'b';} b.prototype.sayhello = function () {console.log ('hello, мое имя:' + this.name);}; var a1 = new a ('a1'); var a2 = new a ('a2'); a1.sayhello (); a2.sayhello ('); B ('b2'); b1.sayhello (); b2.sayhello ();Я написал два конструктора, первый - это A, который содержит метод Sayshello; Вторым является конструктор B, который записывает этот метод Sayshello на свойство прототипа конструктора B. Написание метода внутри конструктора увеличивает стоимость инициализации объекта через конструктор и написание метода на свойство прототипа эффективно снижает эту стоимость. Вы можете подумать, что методы вызова объекта намного быстрее, чем вызов методов в своей цепочке прототипов, что не так. Если у вас нет много прототипов на объекте, их скорость на самом деле похожа.
Кроме того, некоторые вещи следует отметить:
• Во -первых, если вы определите метод на свойстве прототипа функции, помните, что если вы измените метод, метод всех объектов, сгенерированных этим конструктором, будет изменен.
• Другой момент - это проблема улучшения переменной. Мы можем взглянуть на следующий код:
func1 (); // Здесь будет сообщена ошибка, потому что Func1 не было назначено значение при выполнении функции. Ошибка: func1 не является функцией functvar func1 = function () {console.log ('func1');}; func2 (); // это будет выполнено правильно, потому что объявление функции будет продвигаться. Function func2 () {console.log ('func2');}• Что касается вопроса сериализации объекта. Атрибуты, определенные на прототипе функции, не будут сериализованы. Вы можете увидеть следующий код:
Функция a (name) {this.name = name;} a.prototype.saywhat = 'Скажи что ...'; var a = new a ('dreamapple'); console.log (json.stringify (a));Мы видим, что выход {"name": "dreamapple"}
В приведенной выше статье кратко обсуждается метод, а прототип конструкторов JS - это весь контент, которым я поделился с вами. Я надеюсь, что это может дать вам ссылку, и я надеюсь, что вы сможете поддержать Wulin.com больше.