我首先对标题道歉。
我有一个尚未实例化的原型:
noZoom
和zoom
个对象将在实例化时填充对象。
我想从propertiesToIlluminate array
构造函数中的所有属性中推送noZoom
Persona
个对象中的所有对象。
function Persona() {
this.headArea = {
noZoom: {},
zoom: {}
}
this.torsoArea = {
noZoom: {},
zoom: {}
}
this.arm = {
noZoom: {},
zoom: {}
}
this.leg = {
noZoom: {},
zoom: {}
}
this.pelvis = {
noZoom: {},
zoom: {}
}
this.abdomen = {
noZoom: {},
zoom: {}
}
this.illuminate = function() {
var propertiesToIlluminate = [],
prop, illuminateInternal, i = 0,
delay = 100,
intervalId;
for (prop in //what to put here//) {
propertiesToIlluminate.push(prop);
}
}
}
答案 0 :(得分:2)
试试这个:
for (prop in this) {
if (this[prop].noZoom) {
for (key in this[prop].noZoom) {
if (this[prop].noZoom.hasOwnProperty(key)) {
propertiesToIlluminate.push(this[prop].noZoom[key]);
}
}
}
}
答案 1 :(得分:1)
保留一个属性列表可能有意义,然后减少它来构建数组。类似的东西:
function Persona() {
var properties = ["headArea", "torsoArea", "..."];
// ...
this.illuminate = function() {
var self = this;
var propertiesToIlluminate = properties.reduce(function(arr, propName) {
var noZoom = self[propName].noZoom;
for (var prop in noZoom) {
if (noZoom.hasOwnProperty(prop)) {
arr.push(noZoom[prop]);
}
return arr;
}
}, []);
}
}
同样的列表也可以用来实例化开始的对象,迭代它以构建初始状态。
for (var i=0; i<properties.list; i++) {
this[properties[i]] = {noZoom: {}, zoom: {}};
}
如果需要,它也可以在原型上公开,因此其他代码可以轻松获得所有属性的列表。