我正在尝试修改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.
重要提示:我对您的问题的理解是您想要克隆一个对象(或使用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在代码中克隆。我不明白你问题的这一部分,请原谅。
注: 本题尝试回答问题。如果我不明白这个问题,请告诉我评论。
另请注意: 如果我没有回答问题,您可以随意使用上面的代码帖子并复制我的帖子来回答问题。
同样注意: 如果您有疑问,请告诉我评论。
| 归档时间: |
|
| 查看次数: |
170 次 |
| 最近记录: |