Как присвоить метод конструктору?

200
04 марта 2017, 04:57

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

Вопрос - есть ли способ создать новый элемент в конструкторе после его создания (и присвоить ему значение, например функцию)?

Вот пример. Если я правильно понимаю, dog.newSound = changeSound; работает потому что это объект а animal.newSound = changeSound; не рабоатет потому что это конструктор. Есть ли другой способ сделать то же самое для конструктора?

//Конструктор 
 
function Animal(name, age, sound) { 
  this.name = name; 
  this.age = age; 
  this.sound = sound; 
} 
 
//внешняя функция 
function changeSound(sound) { 
  this.sound = sound; 
} 
 
//объект созданный с помощью конструктора 
var dog = new Animal("Jack", 5, "gav-gav") 
 
//создали переменную в объекте и присвоили ей функцию 
dog.newSound = changeSound; 
dog.newSound("woof-woof"); // вызвали функцию  
 
//пишем на страницу 
var here = document.getElementById("placeHere"); 
here.innerHTML = dog.sound;
<p id=placeHere></p>

Answer 1

Используйте Animal.prototype для добавления методов всем объектам типа Animal.

//Конструктор 
 
function Animal(name, age, sound) { 
  this.name = name; 
  this.age = age; 
  this.sound = sound; 
} 
 
Animal.prototype.newSound = changeSound; // !!! 
/* или без отдельной функции: 
Animal.prototype.newSound = function (sound) { 
  this.sound = sound; 
} 
*/ 
 
//внешняя функция 
function changeSound(sound) { 
  this.sound = sound; 
} 
 
//объект созданный с помощью конструктора 
var dog = new Animal("Jack", 5, "gav-gav") 
 
//создали переменную в объекте и присвоили ей функцию 
//dog.newSound = changeSound; 
dog.newSound("cock-a-doodle-doo"); // вызвали функцию  
 
//пишем на страницу 
var here = document.getElementById("placeHere"); 
here.innerHTML = dog.sound;
<p id=placeHere></p>

READ ALSO
json_encode &ldquo;съедает&rdquo; символ \

json_encode “съедает” символ \

Доброго времени! такая проблема создал аякс запрос который генерирует html код и возвращает его в файле обработчике это выглядит так

214
Ajax, post и амперсанд

Ajax, post и амперсанд

Задача состоит в том, чтобы передать серверу POST запрос через AjaxНо проблема возникает если передавать строку с амперсандом

360