vadim5june, спасибо, буду разбираться. Не могу пока сказать работает или нет решение. В реальных условиях оно пока ведет себя немного не так как хотелось бы. Проблема в том, что success содержит функцию, а строка не может содержать функцию (я поэтому и пытался сделать через объект). Впрочем, думаю разберусь... В любом случае, большое спасибо за помощь и уроки JS - почерпнул для себя новой информации
nerv_, представьте, что Вы пишите маленький модуль для большого программного продукта, который регулярно обновляется. И представьте, что функция в которой я хочу изменить 3-4 строки на самом деле состоит из 30-40 строк. Если скопировать всю функцию и переопределить её, то с большой долей возникнет проблема обратной совместимости с новыми версиями.
Выложу "конечный" результат - может кому-то будет интересно.
<!DOCTYPE html>
<head>
<script
src="http://code.jquery.com/jquery-1.9.1.js">
</script>
</head>
<body>
<script>
function someFunc(somevar) {
somevar = typeof(somevar) != 'undefined' ? somevar : 100;
$.ajax({
url: 'index.php',
type: 'post',
data: 'somevar=' + somevar,
dataType: 'json',
success: function(json) {
}
});
};
var somevar='somevar';
var str = someFunc.toString();
var str0 = str.split('$.ajax(')[0];
var stre = ')';
var parameters = 'var pars=' + str.split('$.ajax(')[1].split('})')[0] + '}'; eval(parameters);
var paramsArray = {};
for (var u in pars) {
if (u && pars && u) {
if (u == 'dataType') {
}
else if (u == 'success') {
paramsArray[u] = "function() { alert('success!'); }";
}
else if (u == 'url') {
paramsArray[u] = pars[u];
}
else if (typeof pars[u] == 'function') {
paramsArray[u] = pars[u].toString();
}
else {
paramsArray[u] = pars[u];
}
}
}
paramsArray['error'] = "function(error) { console.log(error); }"
var pp = 'alert(100500); $.ajax(' + JSON.stringify(paramsArray) + stre;
str = str.replace(/(\$\.ajax\(\{[\s\S]+\}\);)/gm, pp);
eval(str);
console.log( someFunc);
someFunc();
</script>
</body>
</html>