如何在javascript中通过引用传递变量?从返回多个值的ActiveX函数读取数据
我有一个ActiveX对象,我想在浏览器中使用它(javascript)。如何在javascript中通过引用传递变量?从返回多个值的ActiveX函数读取数据,javascript,activex,Javascript,Activex,我有一个ActiveX对象,我想在浏览器中使用它(javascript)。 我想调用一个函数。其原型是: function TOPOSFiscalPrinter.DirectIO(Command: Integer; var pData: Integer; var pString: WideString): Integer; 因此,函数返回三个值:结果代码、pData和pString 在javascript中,函数不更新变量pData和pString function test() {
我想调用一个函数。其原型是:
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);
}
变量d
和s
不会更新。它们必须是d=0和s=“ED123456”如何从javascript中返回多个值的函数中读取数据 编辑
显然,Javascript总是通过值传递参数,而不是通过引用传递参数。
我可以在Javascript中通过引用传递值吗 我将不得不改变我的设计,只依赖于通过的参数
值和返回值。原语类型,主要是字符串/数字/布尔值,通过值传递以提高效率。函数、对象、数组等对象通过引用传递。您可以创建一个对象并传递它,例如{d:1,s:'directo'},然后更改值,因为您传递的是引用。JavaScript中不支持输出参数。打包要在自动化对象中返回的内容,为其属性赋值并返回,或者如果返回值已被占用,则创建一个类,该类具有可在ActiveX中指定的属性,并添加一个类型为该类的参数。在ActiveX中,您可以使用IDispatch/Ex获取/设置属性。创建全局变量或对象。或者,如果您担心其他函数访问和更改变量,请创建一个单例。另一个选项是返回一个对象。像这样
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);
}
出于性能原因,诸如
int
或float
之类的基本体总是按值传递,但您可以将它们包装成一个仅包含一个元素的Float32Array
:
a = new Float32Array([123])
a[0]; // == 123
function ChangeA(a) {
a[0] = 333;
}
ChangeA(a)
a[0]; // == 333
它也不起作用。d=新对象(1);s=新对象('DIRECTIO:');顺便说一下,我的意思不是为每个变量创建一个新对象,我的意思是创建一个对象文本,比如
var obj={d:'string',l:'otherthing'}
并通过obj
…函数测试(){var d=new Object(1);var s=new Object('DIRECTIO:');opos.DIRECTIO(1024,d,s);//这是我的activex函数警报(d);警报(s);}呼叫后d=1;s='DIRECTIO:';没有变化。d应为d=0;s应为s='ED123456';我还尝试了var d=newobject();d、 数值=1;var s=新的Objevt();s='方向:';但是没有运气。