Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.02.2015, 12:55
Новичок на форуме
Отправить личное сообщение для emptinessandform Посмотреть профиль Найти все сообщения от emptinessandform
 
Регистрация: 24.02.2015
Сообщений: 4

Этот "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() должен быть без скобок
Ответить с цитированием
  #2 (permalink)  
Старый 24.02.2015, 13:13
Аватар для JsConAp
Интересующийся
Отправить личное сообщение для JsConAp Посмотреть профиль Найти все сообщения от JsConAp
 
Регистрация: 22.02.2015
Сообщений: 24

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);
Ответить с цитированием
  #3 (permalink)  
Старый 24.02.2015, 13:13
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,215

Сообщение от emptinessandform
а вот и проблема, полное имя не изменилось.
Так ты же не менял свойство fullName. Оно таким и осталось...

Сообщение от emptinessandform
вызов namedOne.fullName() должен быть без скобок
Религия не позволяет?
Ответить с цитированием
  #4 (permalink)  
Старый 24.02.2015, 13:26
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,215

Сообщение от 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);
};
Ответить с цитированием
  #5 (permalink)  
Старый 24.02.2015, 13:33
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

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);
Ответить с цитированием
  #6 (permalink)  
Старый 24.02.2015, 13:40
Новичок на форуме
Отправить личное сообщение для emptinessandform Посмотреть профиль Найти все сообщения от emptinessandform
 
Регистрация: 24.02.2015
Сообщений: 4

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

вот так без использования сеттеров должно быть.
Ответить с цитированием
  #7 (permalink)  
Старый 24.02.2015, 13:41
Новичок на форуме
Отправить личное сообщение для emptinessandform Посмотреть профиль Найти все сообщения от emptinessandform
 
Регистрация: 24.02.2015
Сообщений: 4

tsigel,
о спасибо. вот то что нужно. Теперь буду разбирать как вы это сделали! спасибо большое!
Ответить с цитированием
  #8 (permalink)  
Старый 24.02.2015, 13:42
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,215

Сообщение от emptinessandform Посмотреть сообщение
namedOne.firstName = 'Петя'
namedOne.lastName = 'Петров'
namedOne.fullName = 'Петя Петров'

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

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

namedOne.firstName = 'Петя'
namedOne.lastName = 'Петров'
namedOne.fullName = namedOne.firstName+' '+namedOne.lastName
Ответить с цитированием
  #9 (permalink)  
Старый 24.02.2015, 13:50
Новичок на форуме
Отправить личное сообщение для Sinhrofazathron Посмотреть профиль Найти все сообщения от Sinhrofazathron
 
Регистрация: 24.02.2015
Сообщений: 7

А можно сделать какой то аналог get{} set{} как в С?
Ответить с цитированием
  #10 (permalink)  
Старый 24.02.2015, 13:54
Аватар для Safort
Профессор
Отправить личное сообщение для Safort Посмотреть профиль Найти все сообщения от Safort
 
Регистрация: 23.12.2013
Сообщений: 1,856

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пожалуйста помогите с высотой. pavelrer Events/DOM/Window 26 05.05.2014 14:32
У меня проблема. Пожалуйста, помогите! _Dima_54010 Events/DOM/Window 4 17.03.2012 11:38
Помогите оптимизировать этот код Gamestop Общие вопросы Javascript 3 20.01.2012 14:02
помогите пожалуйста у меня прблема Геворг Серверные языки и технологии 4 27.02.2011 14:00
помогите пожалуйста у меня прблема Геворг Серверные языки и технологии 7 24.02.2011 22:20