Javascript变量范围.如何从内部对象函数访问对象变量?

How*_*opa 2 javascript

我想知道如何使用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)

但这似乎有点多余......想法?

Rei*_*eid 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();
Run Code Online (Sandbox Code Playgroud)

这将创建一个局部变量myObj,您可以从任何内部范围访问该变量.它还将该变量作为任何实例化myObj类的属性暴露给外部世界,这意味着您仍然可以执行类似的操作

obj.vars.name = 'test';
Run Code Online (Sandbox Code Playgroud)

它仍然会改变对象的内部状态.这可能是您当前设置的最佳解决方案.

1this JavaScript中关键字的行为很有趣.我建议在Mozilla开发者网络上进行优秀的写作.