2009-11-13 7 views
4

브라우저 (JavaScript)에서 사용하려는 ActiveX 객체가 있습니다.
전화를 걸고 싶은 기능이 있습니다. 프로토 타입은 다음과 같습니다.자바 스크립트에서 참조로 변수를 전달하는 방법은 무엇입니까? 둘 이상의 값을 반환하는 ActiveX 함수에서 데이터 읽기

function TOPOSFiscalPrinter.DirectIO(Command: Integer; var pData: Integer; 
    var pString: WideString): Integer; 

따라서 함수는 결과 코드, pData 및 pString;
자바 스크립트에서이 함수는 변수 pData 및 pString을 업데이트하지 않습니다.

function test() 
{ 
    var d=1, s="DIRECIO:"; 
    var code = opos.DirectIO(1024, d, s); 

    alert(d); alert(s); 
} 

변수 ds는 업데이트되지 않습니다. 그들은 d = 0이고 s = "ED123456"이어야합니다;
자바 스크립트에서 둘 이상의 값을 반환하는 함수에서 데이터를 읽는 방법은 무엇입니까?

수정
분명히 자바 스크립트는 매개 변수를 항상 참조로 전달하지 않습니다.
Java에서 참조로 값을 전달할 수있는 것이 있습니까? 값과 반환 값으로 전달 된 매개 변수에만 의존하도록 디자인을 변경해야합니다.

답변

5

기본적으로 문자열/숫자/부울은 효율성을 위해 값으로 전달됩니다. 함수, 객체, 배열 등과 같은 객체는 참조로 전달됩니다. {d : 1, s : 'directo'}와 같이 객체를 생성하고 전달한 다음 참조를 전달하기 때문에 값을 변경할 수 있습니다.

+0

작동하지 않습니다. d = 새로운 객체 (1); s = 새 개체 ('DIRECTIO :'); –

+2

당신이하고있는 일의 * 전체 코드를 붙여주세요. –

+0

그건 그렇고, 각 변수에 대해 새로운 Object를 만드는 것을 의미하는 것은 아니며, var obj = {d : 'string', l : 'otherthing'}'과 같은 객체 리터럴을 만들고 'obj'를 전달한다는 의미입니다. .. –

2

JavaScript의 출력 매개 변수에 대한 지원이 없습니다. 자동화 개체에서 반환 할 항목을 팩하고 해당 속성에 값을 할당 한 다음 반환하거나 반환 값이 이미있는 경우 ActiveX에 할당 할 수있는 속성이있는 클래스를 만들고 해당 형식이 수업. ActiveX에서 IDispatch/Ex를 사용하여 속성을 가져 오거나 설정할 수 있습니다.

1

전역 변수 또는 개체를 만듭니다. 또는 변수를 액세스하고 변경하는 다른 기능이 걱정된다면 싱글 톤을 만드십시오. 다른 옵션은 객체를 반환하는 것입니다. int 년대 또는 float 년대와 같은이

function TOPOSFiscalPrinter.DirectIO(Command: Integer; var pData: Integer; 
    var pString: WideString): Integer; 

function TOPOSFiscalPrinter.DirectIO(Command, pData, pString){ 
    .... 

    var pObj = { 
     d: 0, 
     s: '', 
     code: '' 
    } 
    pObj.d = pDataAltertedValue; 
    pObj.s = pStringAltertedValue; 
    pObj.code = code; 
    return pObj; 
} 

function test() 
{ 
    var d=1, s="DIRECIO:"; 
    var r = opos.DirectIO(1024, d, s); 
    code = r.code; 
    d = r.d; 
    s = r.s; 



    alert(d); alert(s); 
} 
0

프리미티브처럼 항상 성능상의 이유로 값에 의해 전달되는,하지만 당신은 예를 들어,로 포장 할 수와 같은 하나의 요소가있는 Float32Array :

a = new Float32Array([123]) 
a[0]; // == 123 
function ChangeA(a) { 
    a[0] = 333; 
} 
ChangeA(a) 
a[0]; // == 333 
관련 문제