0

oDevice には Connect() および Disconnect() 関数があります。接続すると、oTest.Capabilities はデータを返します。切断されたときに oTest.Capabilities にアクセスすると、例外がスローされます。oTest.Capabilities プロパティが作成された後も、同じ値のままです。そのプロパティにアクセスしても、「this.oDevice.DeviceCapabilities」を再度呼び出して新しい値を取得することはありません。アクセスするたびに更新する方法はありますか?

var oTest = new Test();

function Test()
{   
    this.oDevice = new ActiveXObject("DeviceNMS.DeviceCLS");
    this.oDevice.Connect();

    this.Capabilities = this.oDevice.DeviceCapabilities;
}
4

2 に答える 2

1

IE9? Object.definePropertyその後、標準モードである限り使用できます。私も動的更新オブジェクトであると予想oDevice.DeviceCapabilitiesしていましたが、静的な場合は使用できます

function Test() {   
    this.oDevice = new ActiveXObject("DeviceNMS.DeviceCLS");
    this.oDevice.Connect();

    Object.defineProperty(this, "capabilities", {
        get: function() {
            return this.oDevice.DeviceCapabilities;
        }
    });
}

プロパティにアクセスするたびに再作成しcapabilitiesます。したがって、毎回 getter 関数を呼び出さないように、連続して数回 (反復/列挙など) 使用する予定がある場合は、変数にキャッシュしてください。myTest.capabilities !== myTest.capabilitiesasDeviceCapabilitiesが異なるオブジェクトを返すことにも注意してください。

于 2012-11-14T21:35:06.133 に答える
1

プロパティにアクセスするとき、Javascript はカスタム コードを実行しません*

代わりに、Capabilities呼び出されるたびに実行される関数を作成します。

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.getCapabilities()たびに評価this.oDevice.DeviceCapabilitiesして結果を返します。つまり、常に最新の値を取得できます。

または、プロトタイプにメソッドを追加することもできます。

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

*ハーモニープロキシを介した、非常に最新のサポートされていない実装にはいくつかの方法があります...しかし、それはまったく別の糸の玉です。

于 2012-11-14T20:01:18.650 に答える