Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Этот "this" меня убивает. Помогите (https://javascript.ru/forum/misc/53925-ehtot-menya-ubivaet-pomogite.html)

emptinessandform 24.02.2015 12:55

Этот "this" меня убивает. Помогите
 
я застрял в решении задачи. Уже весь свой маленький мозг выскреб.

вот что мы имеем в начале.
function NamedOne(first, last) {
    this.firstName = first;
    this.lastName = last;
    this.fullName = this.firstName + ' ' + this.lastName;
}
var namedOne = new NamedOne("Ваня","Иванов")

что мы получаем

namedOne.firstName // -> "Ваня"
namedOne.lastName // -> "Иванов"
namedOne.fullName // -> "Ваня Иванов"

теперь же я изменяю свойства имени и фамилии
namedOne.firstName = "Петя"
namedOne.firstName // -> "Петя" //вывело!

namedOne.lastName = "Петров"
namedOne.lastName // -> "Петров" //вывело!

а вот и проблема, полное имя не изменилось.
namedOne.fullName // -> "Ваня Иванов" // вывело старое значение

надо сделать так что бы оно выводило измененные значения
именно namedOne.fullName // -> "Петя Петров"

this.fullName = function() {
			 return this.firstName + ' ' + this.lastName;
		};

через функцию не получается потому, что вызов namedOne.fullName() должен быть без скобок

JsConAp 24.02.2015 13:13

emptinessandform,
function NamedOne(first, last) {
    this.firstName = first;
    this.lastName = last;
    this.fullName = this.firstName + ' ' + this.lastName;
}
var namedOne = new NamedOne("Ваня", "Иванов");
namedOne.firstName = "Петя";
namedOne.lastName = "Петров";
namedOne.fullName = namedOne.firstName + ' ' + namedOne.lastName;
alert(namedOne.fullName);

ksa 24.02.2015 13:13

Цитата:

Сообщение от emptinessandform
а вот и проблема, полное имя не изменилось.

Так ты же не менял свойство fullName. :D Оно таким и осталось...

Цитата:

Сообщение от emptinessandform
вызов namedOne.fullName() должен быть без скобок

Религия не позволяет? :blink:

ksa 24.02.2015 13:26

Цитата:

Сообщение от emptinessandform
вызов namedOne.fullName() должен быть без скобок

Вариант "без скобок"...

var namedOne = new NamedOne("Ваня", "Иванов");
namedOne.setName("Петя","Петров");
alert(namedOne.fullName);
function NamedOne(first, last) {
	this.setName=function (first, last){
		this.firstName = first;
		this.lastName = last;
		this.fullName = this.firstName + ' ' + this.lastName;
	};
	this.setName(first, last);
};

tsigel 24.02.2015 13:33

function NamedOne(first, last) {
    this.firstName = first;
    this.lastName = last;
    Object.defineProperty(this, "fullName", {
        get: function () {
            return this.firstName + " " + this.lastName;
        }
    });;
}
var namedOne = new NamedOne("Ваня","Иванов");
namedOne.firstName = "Петя";
alert(namedOne.fullName);

emptinessandform 24.02.2015 13:40

namedOne.firstName = 'Петя'
namedOne.lastName = 'Петров'
namedOne.fullName = 'Петя Петров'

вот так без использования сеттеров должно быть.

emptinessandform 24.02.2015 13:41

tsigel,
о спасибо. вот то что нужно. Теперь буду разбирать как вы это сделали! спасибо большое!

ksa 24.02.2015 13:42

Цитата:

Сообщение от emptinessandform (Сообщение 358087)
namedOne.firstName = 'Петя'
namedOne.lastName = 'Петров'
namedOne.fullName = 'Петя Петров'

вот так без использования сеттеров должно быть.

Иначе в твоем варинте не поменяется... :no:

Как вариант, так

namedOne.firstName = 'Петя'
namedOne.lastName = 'Петров'
namedOne.fullName = namedOne.firstName+' '+namedOne.lastName

Sinhrofazathron 24.02.2015 13:50

А можно сделать какой то аналог get{} set{} как в С?

Safort 24.02.2015 13:54

Sinhrofazathron,
ты про что? Приведи пример, не все же C знают.


Часовой пояс GMT +3, время: 22:50.