Как на JScripte передать в процедуру ссылку на переменную ?
От: Аноним  
Дата: 01.06.05 08:51
Оценка:
Есть COM объект, у которого есть функция, которая изменят значения принимаемых ею параметров.
Я пытаюсь передавать параметры обычным способом типа :
//..
var sLogin = "arkan"
var sPasswd= ""
con.ShowLoginForm(sLogin, sPasswd)
//..

в результате должны измениться переменные sLogin и sPasswd но они остаются без изменений. Может как то по другому следует передавать ?


01.06.05 12:53: Перенесено модератором из 'Java' — Blazkowicz
Re: Как на JScripte передать в процедуру ссылку на переменну
От: kazkar Новороссия http://phh.com.ua
Дата: 01.06.05 09:00
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Есть COM объект, у которого есть функция, которая изменят значения принимаемых ею параметров.

А>Я пытаюсь передавать параметры обычным способом типа :
А>
А>//..
А>var sLogin = "arkan"
А>var sPasswd= ""
А>con.ShowLoginForm(sLogin, sPasswd)
А>//..
А>

А>в результате должны измениться переменные sLogin и sPasswd но они остаются без изменений. Может как то по другому следует передавать ?


Насколько мне известно, JS не работает с указателями.
Предлагаю попробовать передавать значения параметров через буфер обмена
Re: Как на JScripte передать в процедуру ссылку на переменну
От: Rigal Россия  
Дата: 01.06.05 09:15
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Есть 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++;
}
Re: Как на JScripte передать в процедуру ссылку на переменну
От: anonymous Россия http://denis.ibaev.name/
Дата: 01.06.05 09:49
Оценка: 15 (3)
Здравствуйте, Аноним, Вы писали:

А>Есть COM объект, у которого есть функция, которая изменят значения принимаемых ею параметров.

А>Я пытаюсь передавать параметры обычным способом типа :
А>в результате должны измениться переменные sLogin и sPasswd но они остаются без изменений. Может как то по другому следует передавать ?

B JavaScript действуют следующие правила передачи аргументов функции:
* Аргументы примитивных типов передаются функции по значению. Иными словами, формальным аргументам присваиваются значения фактических аргументов на момент вызова и, если даже операторы в теле функции изменят значение какого-либо аргумента, то это изменение не коснется переменной, чье значение передавалось в качестве аргумента.
* Объекты (и встроенные, и определенные пользователем) передаются по ссылке. Это означает, что все изменения свойств объекта в теле функции производятся непосредственно в самом объекте, а не в его локальной копии и, следовательно, сохраняются после возврата из функции.


т. е. правильный код примерно таков:
var sLogin = { value: "arkan" };
var sPasswd = { value: "" };
con.ShowLoginForm(sLogin, sPasswd);

причем в функции ShowLoginForm нужно менять не значения аргументов, а значения свойства value аргументов...
Re: Как на JScripte передать в процедуру ссылку на переменну
От: Infernal Россия  
Дата: 01.06.05 10:44
Оценка:
Думаю данный кода достаточно для решения:



<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 но они остаются без изменений. Может как то по другому следует передавать ?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.