将属性对象的选定对象从原型推入数组
Pushing selected objects of objects of properties from a prototype into an array
先为标题道歉。
我有这个原型,它还没有被实例化:
noZoom
和zoom
对象将在实例化时被对象填充。
我想从我的Persona
构造函数的所有属性中将noZoom
对象中的所有对象推入propertiesToIlluminate array
。
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);
}
}
}
试试这个:
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]);
}
}
}
}
保留一个属性列表,然后将其缩减以构建数组可能是有意义的。比如:
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: {}};
}
如果需要,它也可以暴露在原型上,这样其他代码可以很容易地获得所有属性的列表。
相关文章:
- 重载JS'firefox中的对象原型
- 带有对象/原型的链式承诺(Q延期)
- 别名或以其他方式合并两个具有不同名称的相同对象原型
- 创建后指定对象原型
- javascript对象原型与jquery冲突
- 为什么我要将函数添加到对象原型中,而不是将其添加到对象中
- 基本对象/原型语法问题
- Javascript对象/原型.我的理解错了吗
- ES6 const,用于在JavaScript中创建对象原型;这是一种模式吗
- 在角度表达式中使用对象原型
- 对象原型和继承
- 为什么javascript对象原型被称为“fn”
- Uncaught TypeError:对象原型在Symfony 2中只能是Object或ExtJS为null
- 在Javascript中将对象原型函数绑定到对象
- 对象原型在Canvas Game中不起作用
- 如何获取Javascript对象原型的属性
- 为对象原型提供一个方法,该方法指向对象自身属性的值
- 向对象原型添加命名空间方法
- 在Vanilla Javascript中使用窗体中的对象原型创建多个用户
- Javascript对象原型错误