Javascript 对象属性不会在每次访问时更新

标签 javascript oop object properties

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/

相关文章:

javascript - 以不同方式传递参数,函数仍应输出相同的值

javascript - Php,Javascript(Dropzone)如何在上传前将文件保存在一个临时位置?

javascript - 如何在 iphone 上禁用 url 和底栏

javascript - 构造函数的实例可以继承原型(prototype)桶中未定义的成员吗?

oop - 向子类添加公共(public)方法是否违反 LSP(Liskov 替换原则)?

ios - 如何在 IOS 中平滑地缩放图层以将对象保留在屏幕上?

javascript - 删除 DOM 和 jQuery 中的属性

interface - 为什么像 Ruby 和 Python 这样的动态语言没有像 Java 或 C# 那样的接口(interface)概念?

javascript - 根据循环中的计数器创建具有唯一名称的 JavaScript 对象

c++ - 传递对对象的引用以进行变异 C++