从封装中访问对象中的变量

时间:2013-02-28 01:52:58

标签: javascript

标题有点模糊,但代码非常清楚地解释了这个问题:

function Game() {
    this.secret = '';
    this.Playground = {
        this.someTreat: function() {
            console.log('how to access secret from here ?');
        }
    };
}

var Test = new Game();
Test.Playground.someTreat();

我使用相同的代码提供JSFiddle

3 个答案:

答案 0 :(得分:2)

您必须在this函数中创建Game的副本。规范的事情是创建一个名为that的变量。

function Game() {
    this.secret = 'secret information';
    var that = this;
    this.Playground = {
        someTreat: function() {
            console.log(that.secret);
        }
    };
}
var test = new Game();
test.Playground.someTreat();

你可以see this in action on jsFiddle

答案 1 :(得分:2)

在您的代码中,您需要对访问变量secret的方式进行一些更改 - 您可以通过将this关键字复制到that变量(如Peter的答案)来实现。< / p>

另一种方式可能是这样的:

function Game() {
  var secret = 'secret information';
  this.Playground = {
    this.someTreat = function() {
        console.log(secret);
    };
  };
}

由于Game功能机箱,秘密变量对该范围是私有的。只要您在该机箱内定义功能,这些功能就可以访问秘密的“私有”变量。

答案 2 :(得分:0)

(我在Playground和someTreat的定义中修正了你的错误)

在'this'上使用闭包:

function Game() {
    var self = this;
    this.secret = 'xyz';
    this.Playground = {
        someTreat: function() {
            console.log('how to access secret from here ?');
            console.log('response: use self');
            console.log('self.secret: ' + self.secret);
        }
    };
}