我想知道如何使用javascript对象中的函数访问“nam”e变量,如下所示:
function myObj() {
this.vars = {
name: 'bob',
age: '42'
}
this.functions = {
sayName: function() {
alert(this.vars.name);
}
}
}
var obj = new myObj();
obj.functions.sayName();
我在这里缺少什么?
如果我将引用传递给自己,我可以得到名称var:
function myObj() {
this.vars = {
name: 'bob',
age: '42'
}
this.functions = {
sayName: function(name) {
alert(name);
}
}
}
var obj = new myObj();
obj.functions.sayName(obj.vars.name);
但这似乎有点多余......想法?
答案 0 :(得分:5)
问题在于,在您的函数this.functions.sayName
中,this
关键字引用this.functions
而不是当前对象 1 。
以下是该问题的解决方法:
function myObj() {
var vars = this.vars = {
name: 'bob',
age: '42'
}
this.functions = {
sayName: function() {
alert(vars.name);
}
}
}
var obj = new myObj();
obj.functions.sayName();
这将在myObj
内创建一个局部变量,您可以从任何内部范围访问该变量。它还将该变量作为任何实例化myObj
类的属性暴露给外部世界,这意味着您仍然可以执行类似
obj.vars.name = 'test';
它仍然会改变对象的内部状态。这可能是您当前设置的最佳解决方案。
1 JavaScript中this
关键字的行为很有趣。我推荐Mozilla开发者网络上的优秀writeup。
答案 1 :(得分:1)
你可以这样做:
var thisObj = this;
this.functions = {
sayName: function() {
alert(thisObj.vars.name);
}
}
不确定这是否是最佳解决方案,但它确实有效。如果您在函数内部,则Javascript this 始终引用内部范围。
答案 2 :(得分:1)
只需删除this
:
function myObj() {
var vars = {
name: 'bob',
age: '42'
};
this.functions = {
sayName: function() {
alert(vars.name);
}
};
};
var obj = new myObj();
obj.functions.sayName();