Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   проблема с присвоением значения внутриклассовой переменной (https://javascript.ru/forum/misc/43310-problema-s-prisvoeniem-znacheniya-vnutriklassovojj-peremennojj.html)

SVARAI 30.11.2013 22:55

проблема с присвоением значения внутриклассовой переменной
 
Здравствуйте дорогие программисты! Вот, есть проблема, я не могу присвоить ничего внутреклассовой переменной. Может проблема в синтаксисе, но я в описания синтаксиса 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 22:58

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

SVARAI 30.11.2013 23:13

вот в таком случае верхний алерт не реагирует, но почему?
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!!!")}

рони 30.11.2013 23:16

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()

danik.js 30.11.2013 23:18

SVARAI, Вероятно ты хотел написать if (this.blabla == true) ...
Потому как blabla - это локальная переменная, переданная в функцию как аргумент. И ее значение не изменяется, поэтому она всегда == false

SVARAI 30.11.2013 23:23

она не может измениться даже если я на нее ссылаюсь objects[0].blabla ???

danik.js 30.11.2013 23:36

Цитата:

Сообщение от SVARAI
она не может измениться даже если я на нее ссылаюсь objects[0].blabla ???

Так ты не на нее ссылаешься, а на свойство blabla объекта object:
Цитата:

var that={
    blabla: blabla,
...
Сослаться на локальную переменную из-вне невозможно. На то она и локальная.
И следовательно, в методе move проверять нужно тоже свойство объекта, а не локальную переменную.

danik.js 30.11.2013 23:41

Кстати код твой лучше так переписать:
// Имя конструктора принято писать с большой буквы
function Object(blabla){
    this.blabla = blabla;
}
// Методы и константы нужно выносить в прототип
Object.prototype.move = function() {
    // сравнивать с true глупо (за исключением строгого сравнения ===)
    if (this.blabla) {
        alert("это правда!!!")
    }
};

Maxmaxmaximus3 01.12.2013 07:35

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

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

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


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