Просмотр полной версии : Передача объекта в функцию!
Severtain
03.07.2012, 10:04
Возникла небольшая проблема при запуске кода в Google Chrome.
Он не всегда передает указатель на объект и я не знаю с чем это связанно!
Вообщем есть некая функция
function add (name)
{
name[test]++;
}
в которой name указатель на объект.
Но при передаче в него например
add (Object); - все нормально
add (Massiv[11]); - а при массиве объектов, выбивает ошибку!
С чем это может быть связанно, может быть это баг самого объекта в массиве ?
И причем эта проблема через раз! ТО работает то нет!
В других браузерах все ок!
Severtain,
у вас работает этот код? (я на UNIX в FF)
function add(name){
return ++name['lol'];
}
x = {
'lol':1
}
Massiv = new Array(11);
Massiv[11] = x;
alert(add(x));
alert(add(Massiv[11]));
Severtain
03.07.2012, 10:49
На FF, Opera, Safari он и у меня работает=)
А вот на Google Chrome ошибка. Думаю может там не успевают создаться объекты или может порядок у них не правильный, но почему же тогда в других работает.
Какая ошибка? Что пишет в консоли? Покажите пример, в котором происходит ошибка.
В JavaScript нет указателей. Передача происходит по-значению (http://javascript.ru/forum/misc/5731-kopirovanie-i-udalenie-peremennykh-obektov.html).
Severtain
03.07.2012, 11:00
Пишет, что одно из значений в объекте не найдено или отсутсвует!
чтото типа этого
var a= {
ast :0,
tast : {a:0, b:0 }
}
var b = new Array (2);
b[0]= {
ast :0,
tast : {a:0, b:0 }
}
b[1]= {
ast :0,
tast : {a:0, b:0 }
}
function add (name)
{
name.tast.a++;
if (name.tast.b==0)
{alert ('work');}
}
Severtain
03.07.2012, 11:04
Uncaught TypeError: Cannot read property 'одно из значений в объекте в данном случае это был бы b[0].tast.b' of undefined
Severtain,
уберите var-ы перед b[0] = ... и b[1] = ..
var a= {
ast :0,
tast : {a:0, b:0 }
}
var b = new Array (2);
b[0] = {
ast :0,
tast : {a:0, b:0 }
}
b[1]= {
ast :0,
tast : {a:0, b:0 }
}
function add (name)
{
name.tast.a++;
if (name.tast.b==0)
{alert ('work');}
}
add(b[1])//work
add(a)//work
Severtain
03.07.2012, 11:10
Значит скорее всего проблема может быть в том, что номер объекта указан не правильно или же объект не успевает создаться !
Severtain,
пример выше работает?
Severtain
03.07.2012, 11:14
Да! Конечно!
Severtain,
ну тогда проблема не в хроме, а у вас в коде (а то var b[0] = {a:0, tast:{a:0,b:0}} это как-то странно =)])
Severtain
03.07.2012, 11:16
http://severtain.narod2.ru/
На втором Lvl вылетает! и вот хоть тресни!
Запуск возможен только через Chrome
Severtain
03.07.2012, 11:17
Dim@,
в других все пашет )
Severtain, правильно ли я понял, что у вас в Chrome не работает этот код:
var a= {
ast :0,
tast : {a:0, b:0 }
}
var b = new Array (2);
b[0]= {
ast :0,
tast : {a:0, b:0 }
}
b[1]= {
ast :0,
tast : {a:0, b:0 }
}
function add (name)
{
name.tast.a++;
if (name.tast.b==0)
{alert ('work');}
}
add(b[0]);
и вылетает ошибка "Uncaught TypeError: Cannot read property 'одно из значений в объекте в данном случае это был бы b[0].tast.b' of undefined"?
Severtain
03.07.2012, 21:19
Все спасибо, я все уже исправил! Ошибка была у меня в самом начале, до этого кода и объект не передавался т.к. не создавался!
Drimogemon
04.07.2012, 03:19
add (Massiv[11]); - а при массиве объектов, выбивает ошибку!
НО ведь ты передаешь не массииииииив, а одинадцаиый элемент массива
Drimogemon,
он думал что ошибка в поведении объектов в массивах
Severtain
04.07.2012, 13:21
Drimogemon, и что? Он так будет работать! Там же не массив передается, а одинадцатый элемент, а это и есть объект!
vBulletin® v3.6.7, Copyright ©2000-2025, Jelsoft Enterprises Ltd. Перевод: zCarot