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

时间:2017-10-29 16:14:41

标签: javascript export

我正在尝试修改import qualified Data.Set as S isSubset :: Ord a => [a] -> [a] -> Bool isSubset xs ys = all (`S.member` yset) xs where yset = S.fromList ys lengthAtMost :: Int -> [a] -> Bool lengthAtMost n _ | n < 0 = False lengthAtMost _ [] = True lengthAtMost n (_ : xs) = lengthAtMost (n-1) xs 代码以添加变量,以便我可以跟踪状态。我家中有5个阴影,因此变量的每个实例都必须是唯一的。

homebridge-wink3文件中,它有;

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, (和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; 变量的相同实例。

我需要在这做什么?

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

2 个答案:

答案 0 :(得分:1)

重要提示:我对您的问题的理解是您希望克隆对象(lastState或使用getset方法的对象)

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

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

现在,假设我想将对象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);

这是一个示例:

&#13;
&#13;
    
var A = {
  aVariable: "Panem et circencem",
  aMethod: function () {
    return (["Veni", "vidi", "vici"]);
  }
};
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);
B.aVariable = "Ad gloriam";
console.log(B);
console.log (A);
&#13;
&#13;
&#13;

然后,您可以克隆/复制所有对象,以便在对象中包含一些区别属性,或者克隆代码中的lastState。我不明白你问题的这一部分,对不起。

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

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

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

答案 1 :(得分:1)

您可以在return语句

上方声明lastState
let lastState;
return {
  type: "shade",
  group: "shades",

或高于导出语句

let lastState;
export default ({ Characteristic, Service }) => {

如果您在与创建5个实例的范围相同的范围内声明lastState,那么它们将共享相同的lastState