访问变量(parent.child.sgrandschild)的孙子,不带点和一对括号
Access grandchild of a variable (parent.child.grandchild) without dots and one pair of brackets
我正在用一种转换表构建一个与画布相关的类。用户可以编辑转换表。(其实并不相关,但也许你想知道原因):
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'],"100%"],
bg:[['style']['backgroundColor'],""],
position:[['style']['position'],"absolute"],
left:['style'['left'],"0px"],
top:['style'['left'],"0px"]
}
示例:
var b = new cLayout({left:'10%',width:'90%'})
真正的问题:
通常,我会使用el['style']['width']
来设置el.style.width。但我希望使用不带第二对括号的el[something]
:我希望属性名称是完全可变的(我还希望能够设置el['innerHTML']
)。那么,有没有一种方法可以在不使用a[b][c]
的情况下使用a[b]
生孙子?
第页。S.当然,我不想用eval。
不,这是不可能的。如果有嵌套对象,则不能仅跳过一个级别。
不过,您可以编写一个helper函数,它采用类似"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',"100%"],
//...
}
相关文章:
- 将函数的上下文应用于javascript变量
- 无法导出函数expressjs/requestjs中的变量
- 函数参数中的数据与指定变量之间的任何性能差异
- 将PHP变量传递给jQuery时遇到问题
- 如何通过ajax刷新JSF填充的javascript变量
- 参数变量出现ngTable指令问题
- 通过javascript重定向html传递php变量
- 将jsp文件下拉列表中的选定项分配给一个java变量(比如String selection)
- 全局变量和全局对象的属性之间有什么区别吗
- 如何在Bootstrap Modal中为动态点击生成的变量设置jade属性
- 从 Childe 到 Parent ASP 的变量
- “parent”不应该用作javascript变量名(保留字)
- $parent变量在ng-include上从单独的控制器设置时已损坏
- 如何在使用opener.parent时使用javascript变量
- Knockout$root和$parent中Javascript变量的作用域
- 如何调用父类'方法从JavaScript中的子类中删除,以便parent's的局部变量将是可访问的
- 从parent的父控制器访问指令变量
- 访问变量(parent.child.sgrandschild)的孙子,不带点和一对括号
- AngularJS嵌套作用域并更改$parent作用域变量
- Angular.js指令模板中使用的变量来自parent/inherited作用域