2013-09-11 3 views
0

Я использую литерал объекта для my js, а ниже вы можете увидеть его «глобальные» переменные. Одним из них является объект (theBody), который, в свою очередь, содержит массив, называемый «body». Этот массив содержит несколько объектов (только один в примере ниже), которые являются объектами svg.Использовать переменную в свойстве объекта

Я хочу, чтобы иметь возможность присвоить значение заполнения от конкретной переменной, которая называется цвет кузова, но при изменении:

'fill':'#e59225', 

в

'fill': AvGen.theBody.bodyColor, 

Я получаю ошибку неперехваченным ReferenceError: theBody не определено

Почему это и как я могу получить доступ к bodyColor для свойства объекта?

из ЯШ:

var AvGen = { 

    paper: null, 
    theBody: { 
     bodies: [ 
      [0,0,277.9,308.5,{ 
       type:'path', 
       'fill':'#e59225', 
       'stroke':'none', 
       'stroke-width':'0', 
       'fill-opacity':'1', 
       'stroke-opacity':'0' 
      }], 
     ], 
     currNr: 1, 
     currObj: null, 
     bodyColor: '#e59225' 
    }, 

    init: function() { 

    } 
} 
+0

тест 'AvGen' определяется или нет, просто сделать console.log, чтобы проверить это, как и ошибка ясно указывает' неперехваченным ReferenceError: AvGen не defined' – Satpal

+0

я бы предположил, что либо ' AvGen' определяется после того, как вы попытаетесь его использовать, или он определен в закрытии, а ваш код, ссылающийся на него, не входит в объем. –

+0

Возможный дубликат [Саморекламы в объявлениях литералов объекта] (http://stackoverflow.com/questions/4616202/self-references-in-object-literal-declarations) – Bergi

ответ

1

Вы пытаетесь сослаться на что-то еще до того, как оно уже определено! Вы пытаетесь использовать theBody, и он еще не создан. Вместо этого вы можете сделать что-то вроде этого:

var AvGen = { 
    paper: null, 
    theBody: { 
     bodies: [ 
      [0,0,277.9,308.5,{ 
       type:'path', 
       'fill': null, 
       'stroke':'none', 
       'stroke-width':'0', 
       'fill-opacity':'1', 
       'stroke-opacity':'0' 
      }], 
     ], 
     currNr: 1, 
     currObj: null, 
     bodyColor: '#e59225' 
    }, 

    init: function() { 

    } 
} 

AvGen.theBody.bodies[0][4].fill = AvGen.theBody.bodyColor; 

Или даже лучше; экстракт bodyColor полностью:

var bodyColor = "#e59225"; 
var AvGen = { 
    paper: null, 
    theBody: { 
     bodies: [ 
      [0,0,277.9,308.5,{ 
       type:'path', 
       'fill': bodyColor, 
       'stroke':'none', 
       'stroke-width':'0', 
       'fill-opacity':'1', 
       'stroke-opacity':'0' 
      }], 
     ], 
     currNr: 1, 
     currObj: null, 
     bodyColor: bodyColor 
    }, 

    init: function() { 

    } 
} 
1

Проверить эту скрипку DEMO.

Я думаю, что ваша ошибка заключается в том, что вы определяете Avgen после своей функции, которая ее использует. Сначала я определил функцию js и после AvGen и у меня была такая же ошибка, как у вас.

Перемещение блока AvGen до того, как функциональный код разрешил проблему.

AvGen = { 
paper: null, 
theBody: { 
    bodies: [ 
     [0,0,277.9,308.5,{ 
      type:'path', 
      'fill':'#e59225', 
      'stroke':'none', 
      'stroke-width':'0', 
      'fill-opacity':'1', 
      'stroke-opacity':'0' 
     }], 
    ], 
    currNr: 1, 
    currObj: null, 
    bodyColor: '#e59225' 
}, 

init: function() { 

} 
} 
$(document).ready(function(){ 
    $('#test').attr('style', 'background-color:' + AvGen.theBody.bodyColor); 
}); 
Смежные вопросы