Javascript导出 - 实例化变量/对象

mri*_*man 5 javascript export

我正在尝试修改homebridge-wink3代码以添加变量,以便我可以跟踪状态.我家中有5个阴影,因此变量的每个实例都必须是唯一的.

shade.js文件中,它有;

exports.default = ({ Characteristic, Service }) => {
  return {
    type: "shade",
    group: "shades",
    services: [{
      service: Service.WindowCovering,
      characteristics: [{
        characteristic: Characteristic.TargetPosition,
        get: (state, desired_state) => desired_state.position * 100,
Run Code Online (Sandbox Code Playgroud)

我想更改get(和set代码中的其他地方),以便它使用局部变量lastState来跟踪状态.

    get: (state, desired_state) => { 
                if (desired_state.position != null) {
                        lastState = desired_state.position * 100;
                }
                else if (lastState != undefined) {
                        desired_state.position = lastState / 100;
                }
                return lastState;
Run Code Online (Sandbox Code Playgroud)

我花了几个小时试图找出如何让代码维护每个阴影(对象实例)的单个变量,但它们似乎总是共享lastState变量的相同实例.

我需要做什么?

有关代码,请参阅https://github.com/sibartlett/homebridge-wink3/blob/master/src/devices/shade.js.

Sph*_*ech 1

重要提示:我对您的问题的理解是您想要克隆一个对象(或使用and方法lastState的对象)。getset

假设我有一个像这样的对象 A:

var A = {
      aVariable: "Panem et circencem",
      aMethod: function () {
        return (["Veni", "vidi", "vici"]);
      }
    };
Run Code Online (Sandbox Code Playgroud)

现在,假设我想将对象 A 克隆到对象 B。

function clone(obj) {
  if (null == obj || "object" != typeof obj) return obj;
  var copy = obj.constructor();
  for (var attr in obj) {
    if (obj.hasOwnProperty(attr)) copy[attr] = obj[attr];
  }
  return copy;
}

var B = clone(A);
Run Code Online (Sandbox Code Playgroud)

这是一个示例:

var A = {
      aVariable: "Panem et circencem",
      aMethod: function () {
        return (["Veni", "vidi", "vici"]);
      }
    };
Run Code Online (Sandbox Code Playgroud)

然后,您可以克隆/复制所有对象,以便在对象中拥有一些独特的属性或lastState在代码中克隆。我不明白你问题的这一部分,请原谅。

注: 本题尝试回答问题。如果我不明白这个问题,请告诉我评论。

另请注意: 如果我没有回答问题,您可以随意使用上面的代码帖子并复制我的帖子来回答问题。

同样注意: 如果您有疑问,请告诉我评论。