Есть COM объект, у которого есть функция, которая изменят значения принимаемых ею параметров.
Я пытаюсь передавать параметры обычным способом типа :
//..
var sLogin = "arkan"
var sPasswd= ""
con.ShowLoginForm(sLogin, sPasswd)
//..
в результате должны измениться переменные sLogin и sPasswd но они остаются без изменений. Может как то по другому следует передавать ?
01.06.05 12:53: Перенесено модератором из 'Java' — Blazkowicz
Здравствуйте, Аноним, Вы писали:
А>Есть COM объект, у которого есть функция, которая изменят значения принимаемых ею параметров.
А>Я пытаюсь передавать параметры обычным способом типа :
А>А>//..
А>var sLogin = "arkan"
А>var sPasswd= ""
А>con.ShowLoginForm(sLogin, sPasswd)
А>//..
А>
А>в результате должны измениться переменные sLogin и sPasswd но они остаются без изменений. Может как то по другому следует передавать ?
Насколько мне известно, JS не работает с указателями.
Предлагаю попробовать передавать значения параметров через буфер обмена
Здравствуйте, Аноним, Вы писали:
А>Есть COM объект, у которого есть функция, которая изменят значения принимаемых ею параметров.
А>Я пытаюсь передавать параметры обычным способом типа :
А>А>//..
А>var sLogin = "arkan"
А>var sPasswd= ""
А>con.ShowLoginForm(sLogin, sPasswd)
А>//..
А>
А>в результате должны измениться переменные sLogin и sPasswd но они остаются без изменений. Может как то по другому следует передавать ?
Это можно сделать, ели вынести переменные "наружу".
Иначе говоря, эти переменные должны быть определены (объявлены) за пределами всех функций, которые их пользуют. Типа:
var first = 0;
var second = 0;
function test()
{
first = 1;
second = 1;
increment();
alert( first + ', ' + second );
}
function increment()
{
first++;
second++;
}
Здравствуйте, Аноним, Вы писали:
А>Есть COM объект, у которого есть функция, которая изменят значения принимаемых ею параметров.
А>Я пытаюсь передавать параметры обычным способом типа :
А>в результате должны измениться переменные sLogin и sPasswd но они остаются без изменений. Может как то по другому следует передавать ?
B JavaScript действуют следующие правила передачи аргументов функции:
* Аргументы примитивных типов передаются функции по значению. Иными словами, формальным аргументам присваиваются значения фактических аргументов на момент вызова и, если даже операторы в теле функции изменят значение какого-либо аргумента, то это изменение не коснется переменной, чье значение передавалось в качестве аргумента.
* Объекты (и встроенные, и определенные пользователем) передаются по ссылке. Это означает, что все изменения свойств объекта в теле функции производятся непосредственно в самом объекте, а не в его локальной копии и, следовательно, сохраняются после возврата из функции.
т. е. правильный код примерно таков:
var sLogin = { value: "arkan" };
var sPasswd = { value: "" };
con.ShowLoginForm(sLogin, sPasswd);
причем в функции ShowLoginForm нужно менять не значения аргументов, а значения свойства value аргументов...
Думаю данный кода достаточно для решения:
<html>
<head>
<SCRIPT>
var loginData = function() {
this.login = "user";
this.pwd = "password";
}
loginData.prototype.toString = function() {
with(this) {
return "[login: "+login+", password:"+pwd+"]";
}
}
function ShowLoginForm(data) {
with(data) {
login = "guest";
pwd = "none";
}
}
var obj = new loginData();
alert("before: " + obj);
ShowLoginForm(obj);
alert("after: " + obj);
</SCRIPT>
</head>
<body></body>
</html>
Здравствуйте, Аноним, Вы писали:
А>Есть COM объект, у которого есть функция, которая изменят значения принимаемых ею параметров.
А>Я пытаюсь передавать параметры обычным способом типа :
А>А>//..
А>var sLogin = "arkan"
А>var sPasswd= ""
А>con.ShowLoginForm(sLogin, sPasswd)
А>//..
А>
А>в результате должны измениться переменные sLogin и sPasswd но они остаются без изменений. Может как то по другому следует передавать ?