我有这样的课程
class Game {
constructor(player1, player2, gameId) {
this.Clockk = {
totalSeconds: timeForAnswer,
nowSeconds: timeForAnswer,
start: function () {
var self = this;
this.interval = setInterval(function () {
self.nowSeconds -= 1;
if (self.nowSeconds == 0) {
here I want to call "answered" function
}
},
reset: function(){
this.nowSeconds = this.totalSeconds;
},
};
answered(player) {
console.log(player);
}
};
我想从Game
变量调用this.Clockk
类的函数。
变量中的this
关键字本身就是this.Clockk
,我怎样才能获得parrent类本身?
答案 0 :(得分:1)
如果您使用this
对象的方法,那么Clockk
将引用Clockk
对象,并且在Javascript中,没有自然的方式来引用&# 34;父"或者"包含"宾语。因此,您必须在某处存储对父级的引用。我可以想到两种直接的方式来存储它。一种是将其存储在父作用域中,另一种是将其存储在answered()
对象本身的实例数据中。
仅供参考,我还假设answered()
方法应该是Game对象的一种方法(你的问题中的代码并没有完全表明 - 但这似乎是意图)。
以下两种方法可以使用this.Clockk.start()
方法调用父class Game {
constructor(player1, player2, gameId) {
// save parent reference here so child scopes can refer to it
let parentObj = this;
this.Clockk = {
totalSeconds: timeForAnswer,
nowSeconds: timeForAnswer,
start: function () {
var self = this;
this.interval = setInterval(function () {
self.nowSeconds -= 1;
if (self.nowSeconds == 0) {
// here I want to call "answered" function
parentObj.answered();
}
},
reset: function(){
this.nowSeconds = this.totalSeconds;
},
};
}
answered(player) {
console.log(player);
}
}
方法:
在父作用域中保存父引用
Clockk
在class Game {
constructor(player1, player2, gameId) {
this.Clockk = {
// save parent reference in our own instance data
parent: this,
totalSeconds: timeForAnswer,
nowSeconds: timeForAnswer,
start: function () {
var self = this;
this.interval = setInterval(function () {
self.nowSeconds -= 1;
if (self.nowSeconds == 0) {
// here I want to call "answered" function
self.parent.answered();
}
},
reset: function(){
this.nowSeconds = this.totalSeconds;
},
};
}
answered(player) {
console.log(player);
}
}
实例数据
Clockk
或者,您可以将class
实现分解为其自己的{{1}}定义,然后您在其构造函数中将父项传递给它,然后其构造函数将存储父引用在其自己的实例数据中。