如何解决访问不带点和一对括号的变量parent.child.grandchild的孙
| 我正在使用一种转换表来构建与画布相关的类。转换表可以由用户编辑。 (不是很重要,但是也许您想知道为什么):cLayout = function(option) {
//obtaining the canvas (el) here
this.setup = function(option) {
t=this.table;
for (var p in t)
{
el[t[p][0]] = option[p]||t[p][1]
}
}
this.setup(option)
}
cLayout.prototype.table = {
width:[[\'style\'][\'width\'],\"100%\"],height:[\'style\'[\'height\'],bg:[[\'style\'][\'backgroundColor\'],\"\"],position:[[\'style\'][\'position\'],\"absolute\"],left:[\'style\'[\'left\'],\"0px\"],top:[\'style\'[\'left\'],\"0px\"]
}
例:
var b = new cLayout({left:\'10%\',width:\'90%\'})
实际问题:
通常,我会使用ѭ2来设置el.style.width。
但是我想在没有第二对括号的情况下使用el[something]
:我希望属性名称是完全可变的(我也希望能够设置el[\'innerHTML\']
)。因此,有没有办法通过使用a[b]
来获得孙子,而无需使用a[b][c]
?
附言当然,我不想使用eval。
解决方法
不,这是不可能的。如果您有嵌套的对象,则不能仅跳过一个级别。
不过,您可以编写一个辅助函数,该函数需要一个类似于
\"child.grandchild\"
的字符串并设置相应的属性:
function setProp(obj,prop,val) {
var parts = prop.split(\'.\');
while(parts.length > 1) {
obj = obj[parts.shift()];
}
obj[parts.shift()] = val;
}
(您还应该测试某个属性是否可用。)
然后您的代码可能如下所示:
var cLayout = function(option) {
//obtaining the canvas (el) here
this.setup = function(option) {
for(var p in this.table) {
setProp(el,this.table[p][0],option[p]||t[p][1]);
}
}
this.setup(option)
}
cLayout.prototype.table = {
width:[\'style.width\',\"100%\"],height:[\'style.height\',//...
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。