Ockonal
@Ockonal

Как изменять переменные в объекте JavaScript?

Здравствуйте, я не очень разбираюсь в javascript и у меня есть код следующего вида:
function Constructor()
{
    this.data = 5;
}
var state = new Constructor;

state.changeData = function()
{
   this.data = 42;
}


Почему changeData не изменит переменную внутри объекта? Если сделать вывод state.data, то там будет 5.
  • Вопрос задан
  • 2501 просмотр
Решения вопроса 1
miraage
@miraage
Старый прогер
function Constructor() {
  this.data = 5;
}

Constructor.prototype.setData = function() {
  this.data = 42;
};
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 5
@vsvladimir
У меня 42 вывелось, добавил в конце:
state.changeData();
console.log(state.data);
Ответ написан
Комментировать
@bagzon
Backend PHP, NodeJs, JS
Во первых область видимости другая, и расширяешь не через прототипирование.
habrahabr.ru/post/127482
Ответ написан
pro100ShCoder
@pro100ShCoder
программист
function Constructor()
{
    this.data = 5;
    this.changeData = function () {
        return this.data = 42;
    }
}

var state = new Constructor;

state.changeData();

console.log(state.data); //42
Ответ написан
Комментировать
haiku
@haiku
42 же, все ок там.
А вы вообще вызвали state.changeData() или только объявили, но не использовали?
И да, в JS в отличие от какого-нить .NET например, this может очень по-разному указывать, лучше явно обзывать его тем, на что девелопер предполагает чтобы оно ссылалось.
function Cat() {
  var cat = this;
  cat.name = "Catzer";
  /// еще какие-нибудь поля
  return cat;
}
Ответ написан
Комментировать
keslo
@keslo
Как-то так:
function Constructor(){ 
    this.data = 5;
}
Constructor.prototype.changeData = function() {
    this.data = 45;
    return this.data; // если необходимо, то возвращаем измененное значение data
}

var str = new Constructor();
console.log(str.changeData());

Либо как вариант:
function Constructor(){ 
    this.data = 5;
}
function changeData() {
    this.data = 45;
    return this.data; // если необходимо, то возвращаем измененное значение data
}

var str = new Constructor();
console.log(changeData.call(str)); // вызываем функцию changeData с привязкой к объекту str
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы