Синтаксис точки (object.field
) на самом деле просто синтаксический сахар для object['field']
. Если вы обнаружите, что пишете eval('object.'+field)
, вы должны просто написать object['field']
. В приведенном выше примере вы, вероятно, хотите: i18n[$(this).attr('data-i18n')]
.
Поскольку вы кодируете свой атрибут так, что в нем есть точки, попробуйте разделить его по точкам и выполнить итерации по полям. Например (возможно, это можно улучшить):
var fields = $(this).attr('i18n').split('.');
fieldCount = fields.length;
fieldIdx = 0;
var cur = i18n;
while(cur != undefined && fieldIdx > fieldCount) {
cur = cur[fields[fieldIdx++]];
}
Вы захотите сделать дополнительную проверку, чтобы убедиться, что все поля были обработаны, нули не встречались и т. Д.