не поняли использование линии в функции, работающей

77
7

<script>
function person(firstname,lastname,age,eyecolor)
{
this.firstname=firstname;
this.lastname=lastname;
this.age=age;
this.eyecolor=eyecolor;

this.changeName=changeName;

function changeName(name)
{
this.lastname=name;
}
}
myMother=new person("Sally","Rally",48,"green");
document.writeln(myMother.lastname + " is " + myMother.age + " years old.");

myMother.changeName("Doe");
document.writeln(myMother.lastname);
</script>

здесь сначала я определяю тело функции changeName() и вызываю эту функцию с параметром [myMother.changeName("Doe");]. он должен работать, когда он называется, как я узнал ранее.

но вот почему мне нужна эта строка (this.changeName = changeName). если я удалю его document.writeln(myMother.lastname), эта команда не работает. я не понял, почему это происходит и почему эта строка (this.changeName = changeName) используется...

PLZ помочь мне, чтобы выяснить проблему. Поскольку я начинающий программист в JavaScript, дайте мне знать процедуру или способ, каким образом я могу быть лучше в JavaScript или каким образом я должен следовать, чтобы сделать myselt лучшим программистом. Спасибо..

спросил(а) 2021-01-19T22:19:26+03:00 6 месяцев, 1 неделя назад
1
Решение
64

Чтобы иметь возможность использовать точечную нотацию (чтобы вы могли использовать myMother.changeName(name) вместо changeName(myMother, name)), функция должна быть установлена как свойство объекта. this.changeName = changeName устанавливает функцию как свойство создаваемого объекта.

Лучшим способом было бы установить его на прототипе один раз, который затем сделает его доступным для всех объектов, созданных из конструктора person:

person.prototype.changeName = function (name) {
this.lastname = name;
}

Таким образом, нам не нужно повторно создавать функцию каждый раз, когда мы создаем новый объект.

ответил(а) 2021-01-19T22:19:26+03:00 6 месяцев, 1 неделя назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема