标题有点模糊,但代码非常清楚地解释了这个问题:
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。
答案 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();
答案 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);
}
};
}