я заявил в одном файле сценарий следующей подстроки функции заменой:Почему String.Prototype replace не работает внутри вложенных функций?
String.prototype.replaceAt = function(index, character) {
index = parseInt(index, 10);
return this.substr(0, index) + character + this.substr(index + character.length);
}
Если я использую эту функцию в главном файле сценарий (например, сразу после его объявления), он работает должным образом с выводом строки.
Если я использую эту функцию внутри вложенных функций, более точно у меня есть функция внутри другой функции, и я вызываю «replaceAt» внутри второй функции, она не работает и обрезает все символы после «индекса», указанного в "replaceAt". Я также указываю, что это скрипт содержимого в расширении Chrome.
Пример (работает нормально вне функции, в основном файле):
var h = '000000';
h = h.replaceAt(3, "1");
console.log(h);
Пример (обрезает все после того, как "индекс"):
function do_lut() {
temp = '000000000000000';
function nfu_change(e, i) {
if (e.checked) {
if (temp != null) {
console.log(i + " - " + temp);
temp = temp.replaceAt(i, "1");
} else { temp = '000000000000000'.replaceAt(i, "1"); }
}
else { if(temp!=null) {temp = temp.replaceAt(i,"0");} else {temp = new String('000000000000000');} }
console.log(i+" - "+temp);
}
}
for(i=0;i<15;i++)
{
nfu[i] = document.createElement('INPUT');
nfu[i].type = 'checkbox';
nfu[i].id = Math.floor((Math.random() * 100000000) + 1).toString();
nfu[i].name = i.toString();
nfu[i].onchange = function(e) {nfu_change(e.target,e.target.name);}
}
}
выше создаст список CheckBox входов и когда пользователь проверяет/снимает флажок, соответствующий индекс (соответствующий вводу в списке) будет изменен на «0» или «1» true/false в «temp», который будет перезаписан в cookie. Таким образом, «nfu_change» условно называется изменением статуса флажка.
Это может быть яснее увидеть, что происходит, если вы можете воспроизвести это как легко работоспособный минимальный пример, возможно, используя сайты функций стека Snippets. –
Отправьте полный код, пожалуйста. Это может быть проблема контекста. – Superdrac
Как называется 'nfu_change()'? ** Что такое 'i' **? Что делает '000000000000000'.replaceAt (i," 1 ")' дает вам 'temp' (и/или что делает' console.log (i + "-" + temp); 'show you)? Какой '.replaceAt' дает вам проблему? Как бы то ни было, я не вижу здесь ничего плохого. –