Javascript.RU

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

проблема с присвоением значения внутриклассовой переменной
Здравствуйте дорогие программисты! Вот, есть проблема, я не могу присвоить ничего внутреклассовой переменной. Может проблема в синтаксисе, но я в описания синтаксиса js такого не находил, в общем, жду помощи =)
var objects=[];

var object = function(blabla){
	that={
        blabla: blabla,
        move: function(){
    	    if (blabla == true) {alert("true!!!");} 
        }
	};
	return that;
};

objects.push(object(false));


objects[0].blabla=true;
setInterval(function(){
	for(var i=0;i<objects.length;i++){
	     objects[i].move(); 
	}

},30);
if(objects[0].blabla==false){alert("false!!!")}

ну примерно так, присваиваю при создание объекта false, а потом уже присвоить true не получается, почему?

Последний раз редактировалось SVARAI, 30.11.2013 в 23:08.
Ответить с цитированием
  #2 (permalink)  
Старый 30.11.2013, 22:58
Аспирант
Отправить личное сообщение для SVARAI Посмотреть профиль Найти все сообщения от SVARAI
 
Регистрация: 30.11.2013
Сообщений: 41

это проблема одного большого скрипта, я просто ее выписал... И не знаю что здесь вот делать, alert ы поставил, и по идеи все должно работать но вот не хочет не первый не второй срабатывать...

Последний раз редактировалось SVARAI, 30.11.2013 в 23:10.
Ответить с цитированием
  #3 (permalink)  
Старый 30.11.2013, 23:13
Аспирант
Отправить личное сообщение для SVARAI Посмотреть профиль Найти все сообщения от SVARAI
 
Регистрация: 30.11.2013
Сообщений: 41

вот в таком случае верхний алерт не реагирует, но почему?
var objects=[];

var object = function(blabla){
	that={
        blabla: blabla,
        move: function(){ 
    	    if (blabla==true){alert("true!!!");} 
        }
	};
	return that;
};

objects.push(object(false));


objects[0].blabla=true;
setInterval(function(){
	for(var i=0;i<objects.length;i++){
	     objects[i].move(); 
	}

},30);
//if(objects[0].blabla==true){alert("true!!!")}
Ответить с цитированием
  #4 (permalink)  
Старый 30.11.2013, 23:16
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

SVARAI,
var objects=[];
var object = function(blabla){
   var	that={
        blabla: blabla,
        move: function(){
    	    if (this.blabla == true)
             {alert("это правда!!!")}
        }
	};
	return that;
};
objects.push(new object(false));
alert(objects[0].blabla)
objects[0].blabla=true;
objects[0].move()
Ответить с цитированием
  #5 (permalink)  
Старый 30.11.2013, 23:18
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

SVARAI, Вероятно ты хотел написать if (this.blabla == true) ...
Потому как blabla - это локальная переменная, переданная в функцию как аргумент. И ее значение не изменяется, поэтому она всегда == false
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #6 (permalink)  
Старый 30.11.2013, 23:23
Аспирант
Отправить личное сообщение для SVARAI Посмотреть профиль Найти все сообщения от SVARAI
 
Регистрация: 30.11.2013
Сообщений: 41

она не может измениться даже если я на нее ссылаюсь objects[0].blabla ???
Ответить с цитированием
  #7 (permalink)  
Старый 30.11.2013, 23:36
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от SVARAI
она не может измениться даже если я на нее ссылаюсь objects[0].blabla ???
Так ты не на нее ссылаешься, а на свойство blabla объекта object:
Цитата:
var that={
    blabla: blabla,
...
Сослаться на локальную переменную из-вне невозможно. На то она и локальная.
И следовательно, в методе move проверять нужно тоже свойство объекта, а не локальную переменную.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #8 (permalink)  
Старый 30.11.2013, 23:41
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Кстати код твой лучше так переписать:
// Имя конструктора принято писать с большой буквы
function Object(blabla){
    this.blabla = blabla;
}
// Методы и константы нужно выносить в прототип
Object.prototype.move = function() {
    // сравнивать с true глупо (за исключением строгого сравнения ===)
    if (this.blabla) {
        alert("это правда!!!")
    }
};
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #9 (permalink)  
Старый 01.12.2013, 07:35
Профессор
Посмотреть профиль Найти все сообщения от Maxmaxmaximus3
 
Регистрация: 18.11.2013
Сообщений: 275

чувак, ты просто свойство обьекта и переменную одинаковыми именами назвал вот и путаешься, назови разными и путаницы не будет.

function qq(qq){
  var obj = {qq:11}
  this.qq = 22;
}

вот тебе 4 разных вещи названных одним именем, велком ту javascript
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
событие при изменении значения переменной Раед Общие вопросы Javascript 13 24.07.2018 18:11
Событие после изменения значения переменной Glen Swift Events/DOM/Window 5 04.06.2012 22:15
Преобразование значения переменной в строку leny Общие вопросы Javascript 3 01.10.2011 22:34
изменение значения глобальной переменной внутри функции mgmarket Серверные языки и технологии 14 13.09.2011 00:56
RegExp и search. Проблема с переменной в выражении Arconas Общие вопросы Javascript 2 21.05.2010 15:45