我有一个对象文字:
var obj = {
a : document.getElementById("ex1"),
b : obj.a.document.getElementsByTagName("div")
};
我遇到了b属性的问题,出于某种原因它不会让这种情况发生。这可能吗?
答案 0 :(得分:2)
您需要两个步骤:
var obj = {
a : document.getElementById("ex1")
};
obj.b = obj.a.document.getElementsByTagName("div")
或者:
var temp = document.getElementById("ex1")
var obj = {
a : temp,
b : temp.document.getElementsByTagName("div")
};
答案 1 :(得分:2)
在定义属性b
时,尚未定义obj
。解决该问题的一种方法是使您的属性成为一个函数,以便在调用之前不对其进行求值。
var obj = {
a : document.getElementById("ex1"),
b : function() {
// This is not evaluated until obj.b() is called
return obj.a.document.getElementsByTagName("div");
}
};
obj.b();
如果你真的希望它成为一个属性,你必须分两步完成Tomasz Nurkiewicz显示
答案 2 :(得分:0)
现代的方法是使用getter方法:
let obj = {
firstName: "A’dab",
lastName: "Farooqi"
get fullName() {
return this.firstName+" "+this.lastName;
},
}
因此,您现在可以只写obj.fullName
-不需要最后加上括号。