How to pass variable by reference in javascript? Read data from ActiveX function which returns more than one value

删除回忆录丶 提交于 2019-11-29 11:02:18

Primitive types, primarily strings/numbers/booleans are passed by value for efficiency purposes. Objects such as functions, objects, arrays and the like are passed by reference. You can create an object and pass it, eg { d:1, s:'directo' } and then change the values because you're passing a reference.

There is no support for output parameter in JavaScript. Pack what you want to return in an automation object, assign values to its properties and return it, or if your return value is already occupied, create a class that has properties you can assign to in your ActiveX and add a parameter whose type is the class. In your ActiveX you can use IDispatch/Ex to get/set the properties.

Make a global variable or object. Or if you're worried about other funcs accessing and changing the variables then make a singleton. The other option is to return an object. Such as like this

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);
}

Primitives like int's or float's are always passed by value for performance reasons, but you can just wrap them into e.g. a Float32Array with just one element:

a = new Float32Array([123])
a[0]; // == 123
function ChangeA(a) {
    a[0] = 333;
}
ChangeA(a)
a[0]; // == 333
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!