我的问题是关于Javascript对象中包含的数组:
我的程序有许多想要成为"脉冲"靠着窗户。我只是创建一个遍历对象数组的对象,而不是在每个对象中创建一个setInterval,而不是#34; client"并且每个脉冲 - 每个都必须实现一个名为" pulse" - 标准的发布和订阅/监听模式的东西。
以下是有效的代码:
var clients = [];
function Power() {}
Power.prototype.plugIn = function (someObject) {
clients[clients.length] = someObject;
if (!this.interval) {
this.interval = setInterval(this.pulseClients, 13);
}
};
Power.prototype.pulseClients = function () {
var i;
for (i = 0; i < clients.length; i += 1) {
clients[i].pulse();
}
};
请注意,我必须定义我的对象的数组,客户端,OUTSIDE。对于封装,我更喜欢这个:
function Power() {
this.clients = [];
}
Power.prototype.plugIn = function (someObject) {
this.clients[this.clients.length] = someObject;
if (!this.interval) {
this.interval = setInterval(this.pulseClients, 13);
}
};
Power.prototype.pulseClients = function () {
var i;
for (i = 0; i < this.clients.length; i += 1) {
this.clients[i].pulse();
}
};
然而,当我这样做时,我的客户对象不会发出脉冲。从语法上讲,它似乎与我在网上看到的对象中的数组示例一致。 firefox调试器指示this.clients是未定义的,并且我的this变量不再引用Power对象,而是在执行此操作时引用Window对象。我错过了一些明显的东西吗