oDevice 具有 Connect() 和 Disconnect() 函数。连接后,oTest.Capability 返回数据。断开连接时,访问 oTest.Capability 应引发异常。看起来 oTest.Capabilities 属性创建后,它保持相同的值。访问该属性不会导致它再次调用“this.oDevice.DeviceCapability”来获取新值。有没有办法让它在每次访问时更新?
var oTest = new Test();
function Test()
{
this.oDevice = new ActiveXObject("DeviceNMS.DeviceCLS");
this.oDevice.Connect();
this.Capabilities = this.oDevice.DeviceCapabilities;
}
最佳答案
当您访问属性时,Javascript 不会运行任何自定义代码*
因此,让 Capability
成为一个每次调用时都会运行的函数。
function Test()
{
this.oDevice = new ActiveXObject("DeviceNMS.DeviceCLS");
this.oDevice.Connect();
this.getCapabilities = function() {
return this.oDevice.DeviceCapabilities;
}
}
var oTest = new Test();
oTest.getCapabilities(); // note the ()
现在,每次调用 oTest.getCapability()
时,都会评估 this.oDevice.DeviceCapability
并返回结果。这意味着您始终可以获得最新值。
或者更好的是,将方法放在原型(prototype)上!
function Test()
{
this.oDevice = new ActiveXObject("DeviceNMS.DeviceCLS");
this.oDevice.Connect();
};
Test.prototype.getCapabilities = function() {
return this.oDevice.DeviceCapabilities;
};
var oTest = new Test();
oTest.getCapabilities();
<小时/>
*通过和谐代理,在非常现代的实现中,有一些方法并没有得到很好的支持......但这完全是另一回事。
关于Javascript 对象属性不会在每次访问时更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13386306/