Javascript变量范围。如何从内部对象函数访问对象变量?
我想知道如何使用javascript对象中的函数访问“nam”e变量,如下所示:Javascript变量范围。如何从内部对象函数访问对象变量?,javascript,Javascript,我想知道如何使用javascript对象中的函数访问“nam”e变量,如下所示: function myObj() { this.vars = { name: 'bob', age: '42' } this.functions = { sayName: function() { alert(this.vars.name); } } } var obj = new myObj(
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);
但这似乎有点多余。。。想法?你可以这样做:
var thisObj = this;
this.functions = {
sayName: function() {
alert(thisObj.vars.name);
}
}
不确定这是否是最好的解决方案,但它是有效的。如果在函数中,Javascript this总是指内部作用域。只需删除
this
:
function myObj() {
var vars = {
name: 'bob',
age: '42'
};
this.functions = {
sayName: function() {
alert(vars.name);
}
};
};
var obj = new myObj();
obj.functions.sayName();
问题在于,在函数
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中
这个
关键字的行为很有趣。我推荐Mozilla开发者网络上的优秀开发者。它创建一个隐式全局对象,并将vars
对象与任何特定对象解耦。如果您实例化了另一个myObj
,那么最终会有多个对象共享状态。@Reid。我犯了一个小错误,看看最新的提琴。真棒的答案。我确实需要保持外部组件可以访问变量,因此添加this.vars=是关键。谢谢