繁体   English   中英

如何在javascript中通过引用传递变量? 从ActiveX函数读取数据,返回多个值

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

我有一个ActiveX对象,我想在浏览器中使用(javascript)。
有一个我想打电话的功能。 它的原型是:

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

因此,该函数返回三个值:结果代码,pData和pString;
在javascript中,函数不更新变量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”;
如何从函数中读取数据,该函数在javascript中返回多个值?

编辑
显然,Javascript总是按值传递参数,而不是通过引用传递参数。
我可以做些什么来通过Javascript中的引用传递值,或者我将不得不将我的设计更改为仅依赖于通过值和返回值传递的参数。

为了提高效率,原始类型(主要是字符串/数字/布尔值)按值传递。 诸如函数,对象,数组等的对象通过引用传递。 您可以创建一个对象并传递它,例如{d:1,s:'directo'}然后更改值,因为您传递了一个引用。

JavaScript中不支持输出参数。 打包要在自动化对象中返回的内容,为其属性赋值并返回它,或者如果返回值已被占用,则创建一个具有可在ActiveX中指定的属性的类,并添加一个类型为类。 在ActiveX中,您可以使用IDispatch / Ex来获取/设置属性。

创建一个全局变量或对象。 或者,如果您担心其他funcs访问和更改变量,那么请创建一个单例。 另一种选择是返回一个对象。 比如这样

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

由于性能原因,像intfloat这样的原语总是按值传递,但是你只需将它们包装成一个只有一个元素的Float32Array

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM