我想知道如何使用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();
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么?
如果我将引用传递给自己,我可以得到名称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);
Run Code Online (Sandbox Code Playgroud)
但这似乎有点多余......想法?
问题是在您的函数中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();
Run Code Online (Sandbox Code Playgroud)
这将创建一个局部变量myObj,您可以从任何内部范围访问该变量.它还将该变量作为任何实例化myObj类的属性暴露给外部世界,这意味着您仍然可以执行类似的操作
obj.vars.name = 'test';
Run Code Online (Sandbox Code Playgroud)
它仍然会改变对象的内部状态.这可能是您当前设置的最佳解决方案.
1this JavaScript中关键字的行为很有趣.我建议在Mozilla开发者网络上进行优秀的写作.
| 归档时间: |
|
| 查看次数: |
2349 次 |
| 最近记录: |