我以为我是#34;得到它"用javascript,然后我遇到这样的事情。我不知道为什么__sfcont的值未定义。
var __container = "It contains ";
function myObject() {
var temp = 'temp';
}
myObject.prototype = {
constructor: myObject,
searchingFor: {
__sfcont: "a div block ",
label: this.__sfcont + "and a label.",
dropdown: this.__sfcont + "and a dropdown."
}
};
var myObj = new myObject();
console.log(myObj.searchingFor.label);
此预期结果为It contains a div block and a label.
但我得到undefinedand a label.
答案 0 :(得分:6)
在this.__sfcont + "and a label.",
执行时,this
不是您所期望的。它尚未构建searchingFor
,而是myObject.prototype = { ... }
正在执行的上下文。该上下文没有__sfcont
属性。
使label
(以及dropdown
)方法:
label: function() { this.__sfcont + "and a label."; },
...
console.log(myObj.searchingFor.label());
答案 1 :(得分:2)
初始化时无法访问对象属性。您可以定义变量然后重复使用它:
var __sfcont = "a div block ";
myObject.prototype = {
constructor: myObject,
searchingFor: {
__sfcont: __sfcont,
label: __sfcont + "and a label.",
dropdown: __sfcont + "and a dropdown."
}
};
答案 2 :(得分:2)
您也可以使用getter
myObject.prototype = {
constructor: myObject,
searchingFor: {
__sfcont: "a div block ",
get label() {
return this.__sfcont + "and a label"
}
}
};
console.log(myObject.searchingFor.label)